[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