Fixes of various issues introduced by refactoring.

This commit is contained in:
Igor Sysoev
2017-01-31 22:26:53 +03:00
parent 18281ee37e
commit d4d36c65fa
3 changed files with 25 additions and 9 deletions

View File

@@ -85,6 +85,8 @@ nxt_event_conn_proxy_create(nxt_event_conn_t *client)
thr = nxt_thread();
client->read_work_queue = &thr->engine->read_work_queue;
client->write_work_queue = &thr->engine->write_work_queue;
client->socket.read_work_queue = &thr->engine->read_work_queue;
client->socket.write_work_queue = &thr->engine->write_work_queue;
peer->socket.read_work_queue = &thr->engine->read_work_queue;

View File

@@ -459,25 +459,39 @@ static nxt_work_handler_t
nxt_event_engine_queue_pop(nxt_event_engine_t *engine, nxt_task_t **task,
void **obj, void **data)
{
nxt_work_queue_t *wq;
nxt_work_queue_t *wq, *last;
wq = engine->current_work_queue;
last = wq;
if (wq->head == NULL) {
wq = &engine->fast_work_queue;
while (wq->head == NULL) {
engine->current_work_queue++;
wq = engine->current_work_queue;
if (wq->head == NULL) {
if (wq > &engine->final_work_queue) {
engine->current_work_queue = &engine->fast_work_queue;
do {
engine->current_work_queue++;
wq = engine->current_work_queue;
return NULL;
}
if (wq > &engine->final_work_queue) {
wq = &engine->fast_work_queue;
engine->current_work_queue = wq;
}
if (wq->head != NULL) {
goto found;
}
} while (wq != last);
engine->current_work_queue = &engine->fast_work_queue;
return NULL;
}
}
found:
nxt_debug(&engine->task, "work queue: %s", wq->name);
return nxt_work_queue_pop(wq, task, obj, data);

View File

@@ -193,7 +193,7 @@ nxt_thread_exit(nxt_thread_t *thr)
* and link->task is already set to engine->task.
* The link should be freed by the exit handler.
*/
link->work.obj = thr->handle;
link->work.obj = (void *) (uintptr_t) thr->handle;
nxt_event_engine_post(link->engine, &link->work);
}