From: Rob F. <rob...@us...> - 2002-04-12 02:30:45
|
Update of /cvsroot/gaim/gaim/src In directory usw-pr-cvs1:/tmp/cvs-serv10524/src Modified Files: aim.c Log Message: bleh Index: aim.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/aim.c,v retrieving revision 1.178 retrieving revision 1.179 diff -u -d -r1.178 -r1.179 --- aim.c 28 Mar 2002 20:07:45 -0000 1.178 +++ aim.c 12 Apr 2002 02:30:41 -0000 1.179 @@ -554,6 +554,7 @@ char *opt_user_arg = NULL, *opt_login_arg = NULL; #if HAVE_SIGNAL_H int sig_indx; /* for setting up signal catching */ + sigset_t sigset; void (*prev_sig_disp)(); #endif #ifndef USE_APPLET @@ -603,6 +604,14 @@ #if HAVE_SIGNAL_H /* Let's not violate any PLA's!!!! */ /* jseymour: whatever the fsck that means */ + /* Robot101: for some reason things like gdm like to block * + * useful signals like SIGCHLD, so we unblock all the ones we * + * declare a handler for. thanks JSeymour and Vann. */ + if (sigemptyset(&sigset)) { + char errmsg[BUFSIZ]; + sprintf(errmsg, "Warning: couldn't initialise empty signal set"); + perror(errmsg); + } for(sig_indx = 0; catch_sig_list[sig_indx] != -1; ++sig_indx) { if((prev_sig_disp = signal(catch_sig_list[sig_indx], sighandler)) == SIG_ERR) { char errmsg[BUFSIZ]; @@ -610,6 +619,12 @@ catch_sig_list[sig_indx]); perror(errmsg); } + if(sigaddset(&sigset, catch_sig_list[sig_indx])) { + char errmsg[BUFSIZ]; + sprintf(errmsg, "Warning: couldn't include signal %d for unblocking", + catch_sig_list[sig_indx]); + perror(errmsg); + } } for(sig_indx = 0; ignore_sig_list[sig_indx] != -1; ++sig_indx) { if((prev_sig_disp = signal(ignore_sig_list[sig_indx], SIG_IGN)) == SIG_ERR) { @@ -619,6 +634,12 @@ perror(errmsg); } } + + if (sigprocmask(SIG_UNBLOCK, &sigset, NULL)) { + char errmsg[BUFSIZ]; + sprintf(errmsg, "Warning: couldn't unblock signals"); + perror(errmsg); + } #endif |