Author: qboosh                       Date: Sat Feb 26 19:44:22 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- fix for double shutdown on SIGPIPE (fixed in cvs 1.11.3)
  this caused double free() triggering deadlock in NPTL libc

---- Files affected:
SOURCES:
   cvs-nserver-dblshutdown.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/cvs-nserver-dblshutdown.patch
diff -u /dev/null SOURCES/cvs-nserver-dblshutdown.patch:1.1
--- /dev/null   Sat Feb 26 20:44:22 2005
+++ SOURCES/cvs-nserver-dblshutdown.patch       Sat Feb 26 20:44:17 2005
@@ -0,0 +1,91 @@
+--- cvs-nserver-1.11.1.52/src/server.c.orig    2005-02-16 00:11:57.460798401 
+0100
++++ cvs-nserver-1.11.1.52/src/server.c 2005-02-26 20:25:07.156114626 +0100
+@@ -3274,10 +3274,13 @@
+       buf_flush (buf_to_net, 1);
+       buf_shutdown (protocol_inbuf);
+       buf_free (protocol_inbuf);
++      protocol_inbuf = NULL;
+       buf_shutdown (stderrbuf);
+       buf_free (stderrbuf);
++      stderrbuf = NULL;
+       buf_shutdown (stdoutbuf);
+       buf_free (stdoutbuf);
++      stdoutbuf = NULL;
+     }
+ 
+     if (errs)
+@@ -4818,12 +4821,19 @@
+           error (0, status, "shutting down buffer from client");
+           buf_flush (buf_to_net, 1);
+       }
++      buf_free (buf_from_net);
++      buf_from_net = NULL;
+     }
+ 
+     if (dont_delete_temp)
+     {
+       if (buf_to_net != NULL)
++      {
+           (void) buf_shutdown (buf_to_net);
++          buf_free (buf_to_net);
++          buf_to_net = NULL;
++          error_use_protocol = 0;
++      }
+       return;
+     }
+ 
+@@ -4921,7 +4931,13 @@
+     noexec = save_noexec;
+ 
+     if (buf_to_net != NULL)
++    {
++      (void) buf_flush (buf_to_net, 1);
+       (void) buf_shutdown (buf_to_net);
++      buf_free (buf_to_net);
++      buf_to_net = NULL;
++      error_use_protocol = 0;
++    }
+ }
+ 
+ int server_active = 0;
+@@ -5063,25 +5079,6 @@
+       }
+     }
+ 
+-#ifdef SIGABRT
+-    (void) SIG_register (SIGABRT, server_cleanup);
+-#endif
+-#ifdef SIGHUP
+-    (void) SIG_register (SIGHUP, server_cleanup);
+-#endif
+-#ifdef SIGINT
+-    (void) SIG_register (SIGINT, server_cleanup);
+-#endif
+-#ifdef SIGQUIT
+-    (void) SIG_register (SIGQUIT, server_cleanup);
+-#endif
+-#ifdef SIGPIPE
+-    (void) SIG_register (SIGPIPE, server_cleanup);
+-#endif
+-#ifdef SIGTERM
+-    (void) SIG_register (SIGTERM, server_cleanup);
+-#endif
+-
+     /* Now initialize our argument vector (for arguments from the client).  */
+ 
+     /* Small for testing.  */
+@@ -5664,12 +5661,12 @@
+     if (len == 0)
+       len = strlen (str);
+ #ifdef SERVER_SUPPORT
+-    if (error_use_protocol)
++    if (error_use_protocol && buf_to_net != NULL)
+     {
+       buf_output (saved_output, str, len);
+       buf_copy_lines (buf_to_net, saved_output, 'M');
+     }
+-    else if (server_active)
++    else if (server_active && protocol != NULL)
+     {
+       buf_output (saved_output, str, len);
+       buf_copy_lines (protocol, saved_output, 'M');
================================================================

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to