supamii/QttpServer

Threading: Race condition and crash on QttpResponse::close

Opened this issue · 0 comments

Sometimes the server can run into a race condition while processing events, which leads to a memory access violation and causes the program to crash.

The main thread receives events from qt and calls the default event handler.
This eventually leads to a call to uv_write() on QttpResponse::close().

The second thread is started in HttpServer::startServer and runs a libuv event loop.

The issue seems to come from the uv_write() call in the main thread. According to the libuv devs, this call is not safe and should be moved to the event thread using uv_async_send:
https://groups.google.com/forum/#!topic/libuv/iHzv3x-VOr4