[Pkg-wmaker-commits] [wmdrawer] 11/23: debian/patches/fix-599382.patch: New patch; avoid segfault when receiving CTRL-C twice (Closes: #599382).
Doug Torrance
dtorrance-guest at moszumanska.debian.org
Sat Dec 17 05:16:18 UTC 2016
This is an automated email from the git hooks/post-receive script.
dtorrance-guest pushed a commit to branch master
in repository wmdrawer.
commit a81dd15f17ecdada9546ed0090c76465fb0cf230
Author: Doug Torrance <dtorrance at piedmont.edu>
Date: Fri Dec 16 01:33:13 2016 -0500
debian/patches/fix-599382.patch: New patch; avoid segfault
when receiving CTRL-C twice (Closes: #599382).
---
debian/patches/fix-599382.patch | 104 ++++++++++++++++++++++++++++++++++++++++
debian/patches/series | 1 +
2 files changed, 105 insertions(+)
diff --git a/debian/patches/fix-599382.patch b/debian/patches/fix-599382.patch
new file mode 100644
index 0000000..6d77a31
--- /dev/null
+++ b/debian/patches/fix-599382.patch
@@ -0,0 +1,104 @@
+Description: Avoid segfault when receiving CTRL-C twice.
+Author: Kevin Kreamer <kevin at kreamer.org>
+Bug-Debian: https://bugs.debian.org/599382
+Last-Update: 2016-12-16
+
+--- a/wmdrawer.c
++++ b/wmdrawer.c
+@@ -44,7 +44,8 @@
+ #include "pixmaps/defaultHighlightImg.xpm"
+
+ static void signalHandler (int signum);
+-static void quit (int status);
++static void setExit (int status);
++static void quit (void);
+ static void xfreeAllMemory (void);
+ static void buildDock (int argc, char *argv[]);
+ static void setDockIcon (void);
+@@ -80,6 +81,9 @@
+ static unsigned int btnDim = 0;
+ static int highlightCol, highlightRow;
+
++static int shouldExit;
++static int exitCode;
++
+ extern drawerConfig config;
+ extern unsigned int nbRows, nbCols, drawerOK;
+ extern unsigned int useDefaultIconsBg, useDefaultDockIcon, useDefaultHighlightImg;
+@@ -93,6 +97,8 @@
+ setDockIcon ();
+ buildDrawer ();
+ buildTooltip ();
++ exitCode = EXIT_SUCCESS;
++ shouldExit = 0;
+ action.sa_handler = signalHandler;
+ sigemptyset (&action.sa_mask);
+ action.sa_flags = SA_NOCLDSTOP | SA_NODEFER;
+@@ -101,29 +107,34 @@
+ sigaction (SIGCHLD, &action, NULL);
+
+ eventLoop ();
+- return 0;
++ quit ();
++ return exitCode;
+ }
+
+ static void signalHandler (int signum) {
+ switch (signum) {
+ case SIGINT:
+ case SIGTERM:
+- quit (EXIT_SUCCESS);
++ setExit(EXIT_SUCCESS);
+ break;
+ case SIGCHLD:
+ while (waitpid (-1, NULL, WNOHANG | WUNTRACED) > 0);
+ break;
+ default:
+- quit (EXIT_FAILURE);
++ setExit(EXIT_FAILURE);
+ }
+ }
+
+-static void quit (int status) {
++static void setExit (int status) {
++ exitCode = status;
++ shouldExit = 1;
++}
++
++static void quit () {
+ printf ("Bye bye, thx to use %s\n", PACKAGE);
+ xfreeAllMemory ();
+ freeAllMemory ();
+ XCloseDisplay (display);
+- exit (status);
+ }
+
+ void xfreeAllMemory (void) {
+@@ -853,8 +864,17 @@
+ /* X btn's coord */
+ int xbtn = 0, ybtn = 0;
+ unsigned int delta, btnIsPressed = 0;
++ struct timespec tv;
++
++ tv.tv_sec = 0;
++ tv.tv_nsec = 100000;
++
++ while (shouldExit == 0) {
++ if (XPending (display) == 0) {
++ nanosleep(&tv, NULL);
++ continue;
++ }
+
+- while (True) {
+ XNextEvent (display, &e);
+ rebuildApp ();
+ /* look at X.h & Xlib.h in /usr/X11R6/include/X11/ */
+@@ -1012,7 +1032,7 @@
+ }
+ break;
+ case DestroyNotify:
+- quit (EXIT_SUCCESS);
++ setExit(EXIT_SUCCESS);
+ }
+ }
+ }
diff --git a/debian/patches/series b/debian/patches/series
index bfef0d0..a29dbbb 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,3 @@
makefile.patch
fix-641336.patch
+fix-599382.patch
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmdrawer.git
More information about the Pkg-wmaker-commits
mailing list