Package: release.debian.org User: release.debian....@packages.debian.org Usertags: unblock Severity: normal
Please unblock package vorbis-tools version 1.4.0-5 to fix a hang bug in the ogg123 command line tool. As we already was doing an update, we also included a patch to clarify the documentation on command line options -f and -d and improve the error message when they are used incorrectly. This is the source code changes since the version in testing. diff --git a/debian/changelog b/debian/changelog index 1c39385..8c41b6f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +vorbis-tools (1.4.0-5) unstable; urgency=low + + [ Martin Steghöfer ] + * Fix ogg123 freeze when interrupting at End-Of-Stream + (Closes: #307325). + * Make it clear in the ogg123 manual page and error message that -f + needs a previous -d (Closes: #359948). + + -- Petter Reinholdtsen <p...@debian.org> Tue, 11 Nov 2014 21:44:40 +0100 + vorbis-tools (1.4.0-4) unstable; urgency=low * Make sure vorbistagedit quote command line arguments when diff --git a/debian/patches/series b/debian/patches/series index 9b6fad0..34c6b26 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -3,3 +3,5 @@ dont-corrupt-stdout.patch quality-check-first-scale-next.patch format-security.patch fix_xiph_url.diff +fix-ogg123-freeze-when-interrupting-at-end-of-stream.patch +documentation-of-link-between-f-and-d-flag.patch diff --git a/debian/patches/documentation-of-link-between-f-and-d-flag.patch b/debian/patches/documentation-of-link-between-f-and-d-flag.patch new file mode 100644 index 0000000..d2b2ff7 --- /dev/null +++ b/debian/patches/documentation-of-link-between-f-and-d-flag.patch @@ -0,0 +1,40 @@ +From: =?utf-8?q?Martin_Stegh=C3=B6fer?= <mar...@steghoefer.eu> +Date: Wed, 29 Oct 2014 20:06:34 +0100 +Subject: Make it clear in documentation that -f needs a previous -d. + +Bug-Debian: https://bugs.debian.org/359948 +Forwarded: https://trac.xiph.org/ticket/1679 + +The -f option to specify an output file name works only if a file device has previously been specified using the -d option. Some parts of the documentation don't make it very explicit that -f needs -d and that the -d option has to precede the -f option. +--- + ogg123/cmdline_options.c | 2 +- + ogg123/ogg123.1 | 3 ++- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/ogg123/cmdline_options.c b/ogg123/cmdline_options.c +index d663cc6..619b4f5 100644 +--- a/ogg123/cmdline_options.c ++++ b/ogg123/cmdline_options.c +@@ -140,7 +140,7 @@ int parse_cmdline_options (int argc, char **argv, + exit(1); + } + } else { +- status_error(_("=== Cannot specify output file without specifying a driver.\n")); ++ status_error(_("=== Cannot specify output file without previously specifying a driver.\n")); + exit (1); + } + break; +diff --git a/ogg123/ogg123.1 b/ogg123/ogg123.1 +index 160a876..7b434c6 100644 +--- a/ogg123/ogg123.1 ++++ b/ogg123/ogg123.1 +@@ -69,7 +69,8 @@ Specify output device. See + .B DEVICES + section for a list of devices. Any number of devices may be specified. + .IP "-f filename, --file filename" +-Specify output file for file devices. The filename "-" writes to standard ++Specify output file for a file device previously specified with ++--device. The filename "-" writes to standard + out. If the file already exists, + .B ogg123 + will overwrite it. diff --git a/debian/patches/fix-ogg123-freeze-when-interrupting-at-end-of-stream.patch b/debian/patches/fix-ogg123-freeze-when-interrupting-at-end-of-stream.patch new file mode 100644 index 0000000..482f2a2 --- /dev/null +++ b/debian/patches/fix-ogg123-freeze-when-interrupting-at-end-of-stream.patch @@ -0,0 +1,76 @@ +From: =?utf-8?q?Martin_Stegh=C3=B6fer?= <mar...@steghoefer.eu> +Date: Tue, 28 Oct 2014 23:04:19 +0100 +Subject: Fix ogg123 freeze when interrupting at End-Of-Stream. + +Bug-Debian: https://bugs.debian.org/307325 + +When arriving at the end of the input file, the main thread waits for +the output thread to finish up the current buffer. If a cancellation +signal arrives at that stage, this signal of an empty buffer never +arrives because the output thread bails out before actually emptying +the buffer. + +Fix: +1.) Make sure the output thread wakes up the main thread when bailing +out, so the main thread can go on, too. +2.) When the main thread wakes up while waiting for an empty buffer, +make sure it understands the situation (that there won't be an empty +buffer because the replay has been cancelled) and doesn't go back to +sleep. +--- + ogg123/buffer.c | 26 +++++++++++++++++++++++--- + 1 file changed, 23 insertions(+), 3 deletions(-) + +diff --git a/ogg123/buffer.c b/ogg123/buffer.c +index b09c9c9..73290e2 100644 +--- a/ogg123/buffer.c ++++ b/ogg123/buffer.c +@@ -209,8 +209,18 @@ void *buffer_thread_func (void *arg) + never be unset. */ + while ( !(buf->eos && buf->curfill == 0) && !buf->abort_write) { + +- if (buf->cancel_flag || sig_request.cancel) ++ if (buf->cancel_flag || sig_request.cancel) { ++ /* signal empty buffer space, so the main ++ thread can wake up to die in peace */ ++ ++ DEBUG("Abort: Wake up the writer thread"); ++ LOCK_MUTEX(buf->mutex); ++ COND_SIGNAL(buf->write_cond); ++ UNLOCK_MUTEX(buf->mutex); ++ ++ /* abort this thread, too */ + break; ++ } + + DEBUG("Check for something to play"); + /* Block until we can play something */ +@@ -227,8 +237,18 @@ void *buffer_thread_func (void *arg) + + UNLOCK_MUTEX(buf->mutex); + +- if (buf->cancel_flag || sig_request.cancel) ++ if (buf->cancel_flag || sig_request.cancel) { ++ /* signal empty buffer space, so the main ++ thread can wake up to die in peace */ ++ ++ DEBUG("Abort: Wake up the writer thread"); ++ LOCK_MUTEX(buf->mutex); ++ COND_SIGNAL(buf->write_cond); ++ UNLOCK_MUTEX(buf->mutex); ++ ++ /* abort this thread, too */ + break; ++ } + + /* Don't need to lock buffer while running actions since position + won't change. We clear out any actions before we compute the +@@ -756,7 +776,7 @@ void buffer_wait_for_empty (buf_t *buf) + pthread_cleanup_push(buffer_mutex_unlock, buf); + + LOCK_MUTEX(buf->mutex); +- while (!empty && !buf->abort_write) { ++ while (!empty && !buf->abort_write && !buf->cancel_flag && !sig_request.cancel) { + + if (buf->curfill > 0) { + DEBUG1("Buffer curfill = %ld, going back to sleep.", buf->curfill); unblock vorbis-tools/1.4.0-5 -- System Information: Debian Release: 7.7 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'stable') Architecture: amd64 (x86_64) Kernel: Linux 3.2.0-4-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org