Dolda2000 GitWeb
/
doldaconnect.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
abc6177
)
Make doldacond-shell concurrency safe.
author
Fredrik Tolf
<fredrik@dolda2000.com>
Sat, 13 Oct 2007 04:38:22 +0000
(06:38 +0200)
committer
Fredrik Tolf
<fredrik@dolda2000.com>
Sat, 13 Oct 2007 04:38:22 +0000
(06:38 +0200)
clients/gui-shell/dsh.c
patch
|
blob
|
blame
|
history
diff --git
a/clients/gui-shell/dsh.c
b/clients/gui-shell/dsh.c
index
1922aaf
..
9aa6a8e
100644
(file)
--- 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;
{
char pf[1024];
int pfd[2], i;
+ sigset_t ss;
if(getenv("HOME") != NULL)
snprintf(pf, sizeof(pf), "%s/.doldacond.pid", getenv("HOME"));
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);
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) {
if((dpid = fork()) == 0) {
+ sigprocmask(SIG_UNBLOCK, &ss, NULL);
dup2(pfd[1], 2);
for(i = 3; i < FD_SETSIZE; i++)
close(i);
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..."));
create_start_wnd();
gtk_widget_show(start_wnd);
gtk_status_icon_set_tooltip(tray, _("Starting..."));
+ sigprocmask(SIG_UNBLOCK, &ss, NULL);
} else {
connectdc();
}
} else {
connectdc();
}