diff --git a/lib/HttpServer/HttpCommTask.cpp b/lib/HttpServer/HttpCommTask.cpp index b0b632c..1f79fb7 100644 --- a/lib/HttpServer/HttpCommTask.cpp +++ b/lib/HttpServer/HttpCommTask.cpp @@ -75,6 +75,8 @@ namespace triagens { bool handleRequest = false; if (! readRequestBody) { + MUTEX_LOCKER(readBufferLock); + const char * ptr = readBuffer->c_str() + readPosition; const char * end = readBuffer->end() - 3; @@ -197,7 +199,10 @@ namespace triagens { // we have to delete request in here or pass it to a handler, which will delete it if (handleRequest) { - readBuffer->erase_front(bodyPosition + bodyLength); + { + MUTEX_LOCKER(readBufferLock); + readBuffer->erase_front(bodyPosition + bodyLength); + } requestPending = true; diff --git a/lib/Scheduler/SocketTask.cpp b/lib/Scheduler/SocketTask.cpp index 76cd344..c75fe8c 100644 --- a/lib/Scheduler/SocketTask.cpp +++ b/lib/Scheduler/SocketTask.cpp @@ -324,6 +324,7 @@ bool SocketTask::fillReadBuffer (bool& closed) { int nr = read(commSocket, tmpReadBuffer, READ_BLOCK_SIZE); if (nr > 0) { + MUTEX_LOCKER(readBufferLock); readBuffer->appendText(tmpReadBuffer, nr); return true; diff --git a/lib/Scheduler/SocketTask.h b/lib/Scheduler/SocketTask.h index a23e852..66964ce 100644 --- a/lib/Scheduler/SocketTask.h +++ b/lib/Scheduler/SocketTask.h @@ -221,6 +221,12 @@ namespace triagens { mutable basics::Mutex writeBufferLock; +//////////////////////////////////////////////////////////////////////////////// +/// @brief lock on the read buffer +//////////////////////////////////////////////////////////////////////////////// + + mutable basics::Mutex readBufferLock; + private: TRI_tid_t tid; char * tmpReadBuffer;