diff options
| author | a@null <unknown> | 2008-12-12 19:55:03 +0000 | 
|---|---|---|
| committer | a@null <unknown> | 2008-12-12 19:55:03 +0000 | 
| commit | 62a491e36d493bf4585b348a4c28c5ed9bd3ea4e (patch) | |
| tree | a3ced66b4461df644560c74e258eded2f6b9045f | |
| parent | 0b5dcf229f64a23438e6ef5929d78b7f9bd48355 (diff) | |
re-applied Neale's spawn patch, credited Neale in LICENSE
| -rw-r--r-- | LICENSE | 1 | ||||
| -rw-r--r-- | README | 3 | ||||
| -rw-r--r-- | config.mk | 2 | ||||
| -rw-r--r-- | dwm.c | 25 | 
4 files changed, 18 insertions, 13 deletions
| @@ -9,6 +9,7 @@ MIT/X Consortium License  © 2007-2008 Enno Gottox Boland <gottox at s01 dot de>  © 2007-2008 Peter Hartlich <sgkkr at hartlich dot com>  © 2008 Martin Hurton <martin dot hurton at gmail dot com> +© 2008 Neale Pickett <neale dot woozle dot org>  Permission is hereby granted, free of charge, to any person obtaining a  copy of this software and associated documentation files (the "Software"), @@ -38,11 +38,12 @@ the DISPLAY environment variable is set correctly, e.g.:  In order to display status info in the bar, you can do something  like this in your .xinitrc: +    dwm &      while true      do          xsetroot -name "`date` `uptime | sed 's/.*,//'`"          sleep 1 -    done | dwm +    done  Configuration @@ -1,5 +1,5 @@  # dwm version -VERSION = 5.3.1 +VERSION = 5.4  # Customize below to fit your system @@ -178,6 +178,7 @@ static void setlayout(const Arg *arg);  static void setmfact(const Arg *arg);  static void setup(void);  static void showhide(Client *c); +static void sigchld(int signal);  static void spawn(const Arg *arg);  static void tag(const Arg *arg);  static int textnw(const char *text, unsigned int len); @@ -1340,22 +1341,24 @@ showhide(Client *c) {  	}  } + +void +sigchld(int signal) { +	while(0 < waitpid(-1, NULL, WNOHANG)); +} +  void  spawn(const Arg *arg) { -	/* The double-fork construct avoids zombie processes and keeps the code -	 * clean from stupid signal handlers. */ +	signal(SIGCHLD, sigchld);  	if(fork() == 0) { -		if(fork() == 0) { -			if(dpy) -				close(ConnectionNumber(dpy)); -			setsid(); -			execvp(((char **)arg->v)[0], (char **)arg->v); -			fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]); -			perror(" failed"); -		} +		if(dpy) +			close(ConnectionNumber(dpy)); +		setsid(); +		execvp(((char **)arg->v)[0], (char **)arg->v); +		fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]); +		perror(" failed");  		exit(0);  	} -	wait(0);  }  void | 
