mirror of
https://github.com/sogou/workflow.git
synced 2026-02-08 01:33:17 +08:00
Merge pull request #1422 from Barenboim/master
Optimize canceling timer.
This commit is contained in:
@@ -1421,7 +1421,7 @@ int Communicator::create_poller(size_t poller_threads)
|
||||
if ((ssize_t)params.max_open_files < 0)
|
||||
return -1;
|
||||
|
||||
this->msgqueue = msgqueue_create(4096, sizeof (struct poller_result));
|
||||
this->msgqueue = msgqueue_create(16 * 1024, sizeof (struct poller_result));
|
||||
if (this->msgqueue)
|
||||
{
|
||||
params.context = this->msgqueue;
|
||||
|
||||
@@ -1559,7 +1559,6 @@ int poller_add_timer(const struct timespec *value, void *context, void **timer,
|
||||
int poller_del_timer(void *timer, poller_t *poller)
|
||||
{
|
||||
struct __poller_node *node = (struct __poller_node *)timer;
|
||||
int stopped = 0;
|
||||
|
||||
pthread_mutex_lock(&poller->mutex);
|
||||
if (!node->removed)
|
||||
@@ -1570,12 +1569,6 @@ int poller_del_timer(void *timer, poller_t *poller)
|
||||
__poller_tree_erase(node, poller);
|
||||
else
|
||||
list_del(&node->list);
|
||||
|
||||
node->error = 0;
|
||||
node->state = PR_ST_DELETED;
|
||||
stopped = poller->stopped;
|
||||
if (!stopped)
|
||||
write(poller->pipe_wr, &node, sizeof (void *));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1584,10 +1577,15 @@ int poller_del_timer(void *timer, poller_t *poller)
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&poller->mutex);
|
||||
if (stopped)
|
||||
if (node)
|
||||
{
|
||||
node->error = 0;
|
||||
node->state = PR_ST_DELETED;
|
||||
poller->callback((struct poller_result *)node, poller->context);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -!node;
|
||||
return -1;
|
||||
}
|
||||
|
||||
void poller_stop(poller_t *poller)
|
||||
|
||||
Reference in New Issue
Block a user