Fix signal segfaults on Solaris (#3790)
authorSimon Marlow <marlowsd@gmail.com>
Tue, 26 Jan 2010 15:54:49 +0000 (15:54 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Tue, 26 Jan 2010 15:54:49 +0000 (15:54 +0000)
rts/posix/Signals.c

index 98115ba..4bb1255 100644 (file)
@@ -183,7 +183,14 @@ generic_handler(int sig USED_IF_THREADS,
         int r;
 
         buf[0] = sig;
-        memcpy(buf+1, info, sizeof(siginfo_t));
+
+       if (info == NULL) {
+           // info may be NULL on Solaris (see #3790)
+           memset(buf+1, 0, sizeof(siginfo_t));
+       } else {
+           memcpy(buf+1, info, sizeof(siginfo_t));
+       }
+
        r = write(io_manager_pipe, buf, sizeof(siginfo_t)+1);
         if (r == -1 && errno == EAGAIN)
         {