1
0
Fork 0
arangodb/Documentation/issue-231.diff

55 lines
1.8 KiB
Diff

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;