Fixes of various issues introduced by refactoring.
This commit is contained in:
@@ -85,6 +85,8 @@ nxt_event_conn_proxy_create(nxt_event_conn_t *client)
|
|||||||
|
|
||||||
thr = nxt_thread();
|
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.read_work_queue = &thr->engine->read_work_queue;
|
||||||
client->socket.write_work_queue = &thr->engine->write_work_queue;
|
client->socket.write_work_queue = &thr->engine->write_work_queue;
|
||||||
peer->socket.read_work_queue = &thr->engine->read_work_queue;
|
peer->socket.read_work_queue = &thr->engine->read_work_queue;
|
||||||
|
|||||||
@@ -459,25 +459,39 @@ static nxt_work_handler_t
|
|||||||
nxt_event_engine_queue_pop(nxt_event_engine_t *engine, nxt_task_t **task,
|
nxt_event_engine_queue_pop(nxt_event_engine_t *engine, nxt_task_t **task,
|
||||||
void **obj, void **data)
|
void **obj, void **data)
|
||||||
{
|
{
|
||||||
nxt_work_queue_t *wq;
|
nxt_work_queue_t *wq, *last;
|
||||||
|
|
||||||
wq = engine->current_work_queue;
|
wq = engine->current_work_queue;
|
||||||
|
last = wq;
|
||||||
|
|
||||||
if (wq->head == NULL) {
|
if (wq->head == NULL) {
|
||||||
wq = &engine->fast_work_queue;
|
wq = &engine->fast_work_queue;
|
||||||
|
|
||||||
while (wq->head == NULL) {
|
if (wq->head == NULL) {
|
||||||
engine->current_work_queue++;
|
|
||||||
wq = engine->current_work_queue;
|
|
||||||
|
|
||||||
if (wq > &engine->final_work_queue) {
|
do {
|
||||||
engine->current_work_queue = &engine->fast_work_queue;
|
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);
|
nxt_debug(&engine->task, "work queue: %s", wq->name);
|
||||||
|
|
||||||
return nxt_work_queue_pop(wq, task, obj, data);
|
return nxt_work_queue_pop(wq, task, obj, data);
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ nxt_thread_exit(nxt_thread_t *thr)
|
|||||||
* and link->task is already set to engine->task.
|
* and link->task is already set to engine->task.
|
||||||
* The link should be freed by the exit handler.
|
* 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);
|
nxt_event_engine_post(link->engine, &link->work);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user