bugfixed: MUST call sf_hold_task in sf_nio_notify for rare case
parent
5495455fa7
commit
d22f9da49c
|
|
@ -544,6 +544,7 @@ int sf_nio_notify(struct fast_task_info *task, const int stage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sf_hold_task(task); //since 1.2.11
|
||||||
PTHREAD_MUTEX_LOCK(&task->thread_data->waiting_queue.lock);
|
PTHREAD_MUTEX_LOCK(&task->thread_data->waiting_queue.lock);
|
||||||
task->notify_next = NULL;
|
task->notify_next = NULL;
|
||||||
if (task->thread_data->waiting_queue.tail == NULL) {
|
if (task->thread_data->waiting_queue.tail == NULL) {
|
||||||
|
|
@ -633,6 +634,7 @@ void sf_recv_notify_read(int fd, const int event, void *arg)
|
||||||
__sync_bool_compare_and_swap(&task->nio_stages.notify,
|
__sync_bool_compare_and_swap(&task->nio_stages.notify,
|
||||||
stage, SF_NIO_STAGE_NONE);
|
stage, SF_NIO_STAGE_NONE);
|
||||||
}
|
}
|
||||||
|
sf_release_task(task); //since 1.2.11
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1299,6 +1301,7 @@ static int sock_write_done(struct fast_task_info *task,
|
||||||
if (SF_CTX->callbacks.send_done(task,
|
if (SF_CTX->callbacks.send_done(task,
|
||||||
length, &next_stage) != 0)
|
length, &next_stage) != 0)
|
||||||
{
|
{
|
||||||
|
ioevent_add_to_deleted_list(task);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue