wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit 75e6681fe774a2b59f81dbccf36ae1e471939540
parent 5ec38ca782e494baf549a4da603fbf9162b1bdb3
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Wed,  8 Feb 2006 11:07:30 +0100

nah, zombies still occure because of setsid, now sticking to old cool and reliable double-fork again


Diffstat:
cmd/wm/fs.c | 2+-
cmd/wm/wm.c | 8--------
cmd/wm/wm.h | 1-
cmd/wmiibar.c | 10+---------
cmd/wmiikeys.c | 8--------
libwmii/Makefile | 2+-
libwmii/spawn.c | 17+++++++----------
libwmii/wmii.h | 3---
8 files changed, 10 insertions(+), 41 deletions(-)

diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -826,7 +826,7 @@ xwrite(IXPConn *c, Fcall *fcall) switch(m->qid.dtype) { case Droot: if(!strncmp(buf, "quit", 5)) - quit(); + srv.running = 0; else if(!strncmp(buf, "pager", 6)) pager(); else if(!strncmp(buf, "detached", 9)) diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c @@ -30,12 +30,6 @@ usage() exit(1); } -void -quit() -{ - srv.running = 0; -} - static void scale_rect(XRectangle * from_dim, XRectangle * to_dim, XRectangle * src, XRectangle * tgt) @@ -647,8 +641,6 @@ main(int argc, char *argv[]) exit(1); } - wmii_signal(quit); - /* IXP server */ ixp_server_open_conn(&srv, i, new_ixp_conn, ixp_server_close_conn); root_qid.type = IXP_QTDIR; diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -230,5 +230,4 @@ void pager(); void detached_clients(); void attach_detached_client(); void select_page(char *arg); -void quit(); diff --git a/cmd/wmiibar.c b/cmd/wmiibar.c @@ -89,12 +89,6 @@ dummy_error_handler(Display * dpy, XErrorEvent * err) return 0; } -static void -quit() -{ - srv.running = 0; -} - static Item * new_item() { @@ -665,7 +659,7 @@ xwrite(IXPConn *c, Fcall *fcall) memcpy(buf, fcall->data, 4); buf[4] = 0; if(!strncmp(buf, "quit", 5)) { - quit(); + srv.running = 0; break; } } @@ -848,8 +842,6 @@ main(int argc, char *argv[]) exit(1); } - wmii_signal(quit); - /* IXP server */ ixp_server_open_conn(&srv, i, new_ixp_conn, ixp_server_close_conn); root_qid.type = IXP_QTDIR; diff --git a/cmd/wmiikeys.c b/cmd/wmiikeys.c @@ -78,12 +78,6 @@ usage() exit(1); } -static void -quit() -{ - srv.running = 0; -} - /* X stuff */ static void @@ -870,8 +864,6 @@ main(int argc, char *argv[]) exit(1); } - wmii_signal(quit); - /* IXP server */ ixp_server_open_conn(&srv, i, new_ixp_conn, ixp_server_close_conn); root_qid.type = IXP_QTDIR; diff --git a/libwmii/Makefile b/libwmii/Makefile @@ -6,7 +6,7 @@ include ../config.mk CFLAGS += -I../liblitz -I../libixp -I../libcext LDFLAGS += -L../liblitz -llitz -L../libixp -lixp -L../libcext -lcext -SRC = ixp.c signal.c spawn.c wm.c +SRC = ixp.c spawn.c wm.c OBJ = ${SRC:.c=.o} diff --git a/libwmii/spawn.c b/libwmii/spawn.c @@ -5,28 +5,25 @@ #include <stdlib.h> #include <stdio.h> -#include <string.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include "wmii.h" -void +void wmii_spawn(void *dpy, char *cmd) { - pid_t pid = fork(); - - switch (pid) - { - case 0: + /* double-fork catches all zombies */ + if (fork() == 0) { + if (fork() == 0) { setsid(); close(ConnectionNumber(dpy)); execlp("rc", "rc", "-c", cmd, (char *) 0); - exit(1); perror("failed"); exit(1); - case -1: - perror("can't fork"); + } + exit(0); } + wait(0); } diff --git a/libwmii/wmii.h b/libwmii/wmii.h @@ -19,9 +19,6 @@ char *wmii_ixp_version(IXPConn *c, Fcall *fcall); char *wmii_ixp_attach(IXPConn *c, Fcall *fcall); char *wmii_ixp_clunk(IXPConn *c, Fcall *fcall); -/* signal.c */ -void wmii_signal(void (*sigchld_handler)()); - /* spawn.c */ void wmii_spawn(void *dpy, char *cmd);