- SilcThreadPoolCompletion c = silc_calloc(1, sizeof(*c));
- if (c) {
- SILC_LOG_DEBUG(("Run completion through scheduler %p", t->schedule));
- c->schedule = t->schedule;
- c->completion = t->completion;
- c->completion_context = t->completion_context;
- silc_schedule_task_add_timeout(c->schedule,
- silc_thread_pool_run_completion, c,
- 0, 0);
- silc_schedule_wakeup(c->schedule);
- } else {
- t->completion(NULL, t->completion_context);
+ SILC_LOG_DEBUG(("Run completion through scheduler %p", t->schedule));
+ if (!silc_schedule_task_add_timeout(t->schedule, t->completion,
+ t->completion_context, 0, 0)) {
+ SILC_LOG_DEBUG(("Run completion directly"));
+ t->completion(NULL, NULL, 0, 0, t->completion_context);