From: Fredrik Tolf Date: Sat, 13 Oct 2007 04:38:22 +0000 (+0200) Subject: Make doldacond-shell concurrency safe. X-Git-Tag: 1.0~25^2 X-Git-Url: http://git.dolda2000.com/gitweb/?p=doldaconnect.git;a=commitdiff_plain;h=a415902212d50526dbe9b53bb99f40de25a3ce3d Make doldacond-shell concurrency safe. --- diff --git a/clients/gui-shell/dsh.c b/clients/gui-shell/dsh.c index 1922aaf..9aa6a8e 100644 --- a/clients/gui-shell/dsh.c +++ b/clients/gui-shell/dsh.c @@ -396,6 +396,7 @@ void startdaemon(void) { char pf[1024]; int pfd[2], i; + sigset_t ss; if(getenv("HOME") != NULL) snprintf(pf, sizeof(pf), "%s/.doldacond.pid", getenv("HOME")); @@ -403,7 +404,11 @@ void startdaemon(void) snprintf(pf, sizeof(pf), "%s/.doldacond.pid", getpwuid(getuid())->pw_dir); if(access(pf, F_OK) || !running(pf)) { pipe(pfd); + sigemptyset(&ss); + sigaddset(&ss, SIGCHLD); + sigprocmask(SIG_BLOCK, &ss, NULL); if((dpid = fork()) == 0) { + sigprocmask(SIG_UNBLOCK, &ss, NULL); dup2(pfd[1], 2); for(i = 3; i < FD_SETSIZE; i++) close(i); @@ -419,6 +424,7 @@ void startdaemon(void) create_start_wnd(); gtk_widget_show(start_wnd); gtk_status_icon_set_tooltip(tray, _("Starting...")); + sigprocmask(SIG_UNBLOCK, &ss, NULL); } else { connectdc(); }