Check for NULL internal context in all functions, as it may
authorPekka Riikonen <priikone@silcnet.org>
Thu, 21 Mar 2002 18:18:37 +0000 (18:18 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Thu, 21 Mar 2002 18:18:37 +0000 (18:18 +0000)
be NULL.

lib/silcutil/unix/silcunixschedule.c

index de64bd58b64e693203637ff0e3f9931ee310c9d5..2bdff338251bc68f921f797b9f1973e0b5938a62 100644 (file)
@@ -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);
 }