Commit Diff


commit - b246ebb01fd779208a9c53c20075fc8a94334f96
commit + a1c232cd01d5cdefe98b5cc36304114a6874fb3b
blob - 71870f738fd5a6c106721b79c3acfde3104c70dc
blob + 6181d1bb7c8f9ca62d555a8ea2a4d641a4f069ec
--- src/main.c
+++ src/main.c
@@ -12,6 +12,7 @@
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <sys/types.h>
+#include <sys/wait.h>
 
 #include <X11/Xlib.h>
 
@@ -207,6 +208,8 @@ read_config(
 void
 sig_handler(int sig)
 {
+	int saved_errno = errno;
+
 	switch (sig)
 	{
 		case SIGTERM:
@@ -216,6 +219,9 @@ sig_handler(int sig)
 		case SIGHUP:
 			reload_config = 1;
 			break;
+		case SIGCHLD:
+			while (waitpid(-1, NULL, WNOHANG) > 0);
+			break;
 		case SIGUSR1:
 			reload_mail = 1;
 			break;
@@ -223,6 +229,7 @@ sig_handler(int sig)
 			reload_battery = 1;
 			break;
 	}
+	errno = saved_errno;
 }
 
 void
@@ -237,6 +244,7 @@ install_signal_handlers(void)
 	if (sigaction(SIGTERM, &sa, NULL) == -1) perror("sigaction");
 	if (sigaction(SIGINT, &sa, NULL) == -1) perror("sigaction");
 	if (sigaction(SIGHUP, &sa, NULL) == -1) perror("sigaction");
+	if (sigaction(SIGCHLD, &sa, NULL) == -1) perror("sigaction");
 	if (sigaction(SIGUSR1, &sa, NULL) == -1) perror("sigaction");
 	if (sigaction(SIGUSR2, &sa, NULL) == -1) perror("sigaction");
 }