mirror of https://gitee.com/bigwinds/arangodb
55 lines
1.8 KiB
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;
|