From: Pekka Riikonen Date: Thu, 21 Mar 2002 18:18:37 +0000 (+0000) Subject: Check for NULL internal context in all functions, as it may X-Git-Tag: silc.client.0.8.3~7 X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=commitdiff_plain;h=17dc564f18463289ef226db1e450273ebd39709b Check for NULL internal context in all functions, as it may be NULL. --- diff --git a/lib/silcutil/unix/silcunixschedule.c b/lib/silcutil/unix/silcunixschedule.c index de64bd58..2bdff338 100644 --- a/lib/silcutil/unix/silcunixschedule.c +++ b/lib/silcutil/unix/silcunixschedule.c @@ -112,6 +112,7 @@ void *silc_schedule_internal_init(SilcSchedule schedule) #ifdef SILC_THREADS if (pipe(internal->wakeup_pipe)) { + SILC_LOG_ERROR(("pipe() fails: %s", strerror(errno))); silc_free(internal); return NULL; } @@ -122,6 +123,7 @@ void *silc_schedule_internal_init(SilcSchedule schedule) 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); @@ -171,6 +173,9 @@ void silc_schedule_internal_signal_register(void *context, SilcUnixScheduler internal = (SilcUnixScheduler)context; int i; + if (!internal) + return; + sigprocmask(SIG_BLOCK, &internal->signals, &internal->signals_blocked); for (i = 0; i < SIGNAL_COUNT; i++) { @@ -195,6 +200,9 @@ void silc_schedule_internal_signal_unregister(void *context, SilcUnixScheduler internal = (SilcUnixScheduler)context; int i; + if (!internal) + return; + sigprocmask(SIG_BLOCK, &internal->signals, &internal->signals_blocked); for (i = 0; i < SIGNAL_COUNT; i++) { @@ -219,6 +227,9 @@ void silc_schedule_internal_signal_call(void *context, SilcUInt32 signal) SilcUnixScheduler internal = (SilcUnixScheduler)context; int i; + if (!internal) + return; + sigprocmask(SIG_BLOCK, &internal->signals, &internal->signals_blocked); for (i = 0; i < SIGNAL_COUNT; i++) { @@ -237,6 +248,9 @@ void silc_schedule_internal_signals_call(void *context, SilcUnixScheduler internal = (SilcUnixScheduler)context; int i; + if (!internal) + return; + sigprocmask(SIG_BLOCK, &internal->signals, &internal->signals_blocked); for (i = 0; i < SIGNAL_COUNT; i++) { @@ -257,6 +271,10 @@ void silc_schedule_internal_signals_call(void *context, void silc_schedule_internal_signals_block(void *context) { SilcUnixScheduler internal = (SilcUnixScheduler)context; + + if (!internal) + return; + sigprocmask(SIG_BLOCK, &internal->signals, &internal->signals_blocked); } @@ -265,5 +283,9 @@ void silc_schedule_internal_signals_block(void *context) void silc_schedule_internal_signals_unblock(void *context) { SilcUnixScheduler internal = (SilcUnixScheduler)context; + + if (!internal) + return; + sigprocmask(SIG_SETMASK, &internal->signals_blocked, NULL); }