#ifdef SILC_THREADS
if (pipe(internal->wakeup_pipe)) {
+ SILC_LOG_ERROR(("pipe() fails: %s", strerror(errno)));
silc_free(internal);
return NULL;
}
0, 0, SILC_TASK_FD,
SILC_TASK_PRI_NORMAL);
if (!internal->wakeup_task) {
+ SILC_LOG_ERROR(("Could not add a wakeup task, threads won't work"));
close(internal->wakeup_pipe[0]);
close(internal->wakeup_pipe[1]);
silc_free(internal);
SilcUnixScheduler internal = (SilcUnixScheduler)context;
int i;
+ if (!internal)
+ return;
+
sigprocmask(SIG_BLOCK, &internal->signals, &internal->signals_blocked);
for (i = 0; i < SIGNAL_COUNT; i++) {
SilcUnixScheduler internal = (SilcUnixScheduler)context;
int i;
+ if (!internal)
+ return;
+
sigprocmask(SIG_BLOCK, &internal->signals, &internal->signals_blocked);
for (i = 0; i < SIGNAL_COUNT; i++) {
SilcUnixScheduler internal = (SilcUnixScheduler)context;
int i;
+ if (!internal)
+ return;
+
sigprocmask(SIG_BLOCK, &internal->signals, &internal->signals_blocked);
for (i = 0; i < SIGNAL_COUNT; i++) {
SilcUnixScheduler internal = (SilcUnixScheduler)context;
int i;
+ if (!internal)
+ return;
+
sigprocmask(SIG_BLOCK, &internal->signals, &internal->signals_blocked);
for (i = 0; i < SIGNAL_COUNT; i++) {
void silc_schedule_internal_signals_block(void *context)
{
SilcUnixScheduler internal = (SilcUnixScheduler)context;
+
+ if (!internal)
+ return;
+
sigprocmask(SIG_BLOCK, &internal->signals, &internal->signals_blocked);
}
void silc_schedule_internal_signals_unblock(void *context)
{
SilcUnixScheduler internal = (SilcUnixScheduler)context;
+
+ if (!internal)
+ return;
+
sigprocmask(SIG_SETMASK, &internal->signals_blocked, NULL);
}