mirror of https://gitee.com/bigwinds/arangodb
make sure task is not destroyed during setup
This commit is contained in:
parent
178e77bc5d
commit
bf6abbea7f
|
@ -177,7 +177,8 @@ HttpCommTask::HttpCommTask (HttpServer* server,
|
|||
_sinceCompactification(0),
|
||||
_originalBodyLength(0),
|
||||
_isChunked(false),
|
||||
_chunkedTask(this) {
|
||||
_chunkedTask(this),
|
||||
_setupDone(false) {
|
||||
LOG_TRACE(
|
||||
"connection established, client %d, server ip %s, server port %d, client ip %s, client port %d",
|
||||
(int) TRI_get_fd_or_handle_of_socket(socket),
|
||||
|
@ -710,6 +711,14 @@ void HttpCommTask::finishedChunked () {
|
|||
processRead();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief task set up complete
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void HttpCommTask::setupDone () {
|
||||
_setupDone.store(true, std::memory_order_relaxed);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- protected methods
|
||||
// -----------------------------------------------------------------------------
|
||||
|
@ -1172,6 +1181,10 @@ bool HttpCommTask::handleAsync () {
|
|||
bool HttpCommTask::handleRead (bool& closed) {
|
||||
bool res = true;
|
||||
|
||||
if (! _setupDone.load(std::memory_order_relaxed)) {
|
||||
return res;
|
||||
}
|
||||
|
||||
if (! _closeRequested) {
|
||||
res = fillReadBuffer(closed);
|
||||
|
||||
|
|
|
@ -143,6 +143,12 @@ namespace triagens {
|
|||
|
||||
void finishedChunked ();
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief task set up complete
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void setupDone ();
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- private methods
|
||||
// -----------------------------------------------------------------------------
|
||||
|
@ -439,6 +445,12 @@ namespace triagens {
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
AsyncChunkedTask _chunkedTask;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief task ready
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
std::atomic<bool> _setupDone;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -346,12 +346,16 @@ void HttpServer::handleConnected (TRI_socket_t s, const ConnectionInfo& info) {
|
|||
|
||||
// registers the task and get the number of the scheduler thread
|
||||
ssize_t n;
|
||||
_scheduler->registerTask(task, &n);
|
||||
int res = _scheduler->registerTask(task, &n);
|
||||
|
||||
// register the ChunkedTask in the same thread
|
||||
if (res == TRI_ERROR_NO_ERROR) {
|
||||
registerChunkedTask(task, n);
|
||||
}
|
||||
|
||||
task->setupDone();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief handles a connection close
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
Loading…
Reference in New Issue