silc_schedule_task_add_timeout(schedule, cont, (void *)i, 0, 100);
}
+SILC_TASK_CALLBACK(interrupt)
+{
+ SILC_LOG_DEBUG(("SIGINT signal"));
+ silc_schedule_stop(schedule);
+}
+
int main(int argc, char **argv)
{
SilcBool success = FALSE;
if (!schedule)
goto err;
+ silc_schedule_task_add_signal(schedule, SIGINT, interrupt, NULL);
+
silc_schedule_task_add_timeout(schedule, start, NULL, 0, 1);
SILC_LOG_DEBUG(("Running scheduler"));
SilcTaskCallback callback;
void *context;
SilcBool call;
+ SilcSchedule schedule;
} SilcUnixSignal;
#define SIGNAL_COUNT 32
void *app_context)
{
SilcUnixScheduler internal;
+ int i;
internal = silc_calloc(1, sizeof(*internal));
if (!internal)
internal->app_context = app_context;
- memset(signal_call, 0, sizeof(signal_call) / sizeof(signal_call[0]));
+ for (i = 0; i < SIGNAL_COUNT; i++) {
+ signal_call[i].signal = 0;
+ signal_call[i].call = FALSE;
+ signal_call[i].schedule = schedule;
+ }
return (void *)internal;
}
for (i = 0; i < SIGNAL_COUNT; i++) {
if (signal_call[i].signal == signal) {
signal_call[i].call = TRUE;
+ signal_call[i].schedule->signal_tasks = TRUE;
SILC_LOG_DEBUG(("Scheduling signal %d to be called",
signal_call[i].signal));
break;