Package: gzip
Version: 1.3.5-9
Tags: patch
While looking at the ubuntu patches for gzip, I found some changes
which are missing in the debian package. These are the ubuntu
changelog entries related to the fixes:
gzip (1.3.5-9ubuntu3) warty; urgency=low
* Acutually use the abort_gzip_signal routine created in -9ubuntu2
(really Closes: Ubuntu#1854)
-- Matt Zimmerman <[EMAIL PROTECTED]> Wed, 13 Oct 2004 08:15:48 -0700
gzip (1.3.5-9ubuntu2) warty; urgency=low
* Use a separate signal handler function rather than changing abort_gzip,
since abort_gzip is used in non-signal contexts as well
-- Matt Zimmerman <[EMAIL PROTECTED]> Mon, 11 Oct 2004 12:50:02 -0700
gzip (1.3.5-9ubuntu1) warty; urgency=low
* Call _exit rather than the do_exit cleanup routine from abort_gzip.
abort_gzip is a signal handler, and do_exit does a number of things that
signal handlers are not permitted to do (Closes: Ubuntu#1854)
-- Matt Zimmerman <[EMAIL PROTECTED]> Mon, 11 Oct 2004 03:34:02 -0700
The ubuntu bug report is available from
<URL: https://bugzilla.ubuntu.com/show_bug.cgi?id=1854 >. The problem
is described there as:
when running apt-get upgrade, apt-extracttemplates never finishes
due to gzip hanging on a futex.
If I try to strace apt-get, it works, so I'm not able to generate a
useful trace. dpkg by itself on single packages seems to work
still, so I could try to track down if it's a single package that's
causing the trouble.
I'm quite sure this problem exist in Debian as well. Here is the
complete patch from ubuntu:
--- gzip-1.3.5.orig/gzip.c
+++ gzip-1.3.5/gzip.c
@@ -464,16 +467,16 @@
foreground = signal(SIGINT, SIG_IGN) != SIG_IGN;
if (foreground) {
- (void) signal (SIGINT, (sig_type)abort_gzip);
+ (void) signal (SIGINT, (sig_type)abort_gzip_signal);
}
#ifdef SIGTERM
if (signal(SIGTERM, SIG_IGN) != SIG_IGN) {
- (void) signal(SIGTERM, (sig_type)abort_gzip);
+ (void) signal(SIGTERM, (sig_type)abort_gzip_signal);
}
#endif
#ifdef SIGHUP
if (signal(SIGHUP, SIG_IGN) != SIG_IGN) {
- (void) signal(SIGHUP, (sig_type)abort_gzip);
+ (void) signal(SIGHUP, (sig_type)abort_gzip_signal);
}
#endif
@@ -580,7 +586,7 @@
#ifdef SIGPIPE
/* Ignore "Broken Pipe" message with --quiet */
if (quiet && signal (SIGPIPE, SIG_IGN) != SIG_IGN)
- signal (SIGPIPE, (sig_type) abort_gzip);
+ signal (SIGPIPE, (sig_type) abort_gzip_signal);
#endif
/* By default, save name and timestamp on compression but do not
@@ -1842,14 +1849,31 @@
}
/* ========================================================================
- * Signal and error handler.
+ * Close and unlink the output file if appropriate. This routine must be
+ * async-signal-safe.
*/
-RETSIGTYPE abort_gzip()
-{
+local void do_remove() {
if (remove_ofname) {
close(ofd);
xunlink (ofname);
}
+}
+
+/* ========================================================================
+ * Error handler.
+ */
+RETSIGTYPE abort_gzip()
+{
+ do_remove();
do_exit(ERROR);
}
+
+/* ========================================================================
+ * Signal handler.
+ */
+RETSIGTYPE abort_gzip_signal()
+{
+ do_remove();
+ _exit(ERROR);
+}
--- gzip-1.3.5.orig/gzip.h
+++ gzip-1.3.5/gzip.h
@@ -273,6 +274,7 @@
/* in gzip.c */
RETSIGTYPE abort_gzip OF((void));
+RETSIGTYPE abort_gzip_signal OF((void));
/* in deflate.c */
void lm_init OF((int pack_level, ush *flags));
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]