blocking event loop