Sophie

Sophie

distrib > Mandriva > 2009.0 > x86_64 > by-pkgid > 68ae6bf0d09c3f3076554af54ffffac6 > files > 1

vorbis-tools-1.2.0-4mdv2009.0.src.rpm

  This adds a return value to buffer_submit_data() so that ogg123
knows when the buffer has shut down due to an error. Without this it
doesn't hang, but it continues to decode the input even though there's
no place to write it to.

Index: ogg123/buffer.c
===================================================================
--- ogg123.orig/buffer.c	2008-05-01 19:32:16.000000000 -0700
+++ ogg123/buffer.c	2008-05-01 19:32:34.000000000 -0700
@@ -283,7 +283,7 @@
 }
 
 
-void submit_data_chunk (buf_t *buf, char *data, size_t size)
+int submit_data_chunk (buf_t *buf, char *data, size_t size)
 {
   long   buf_write_pos; /* offset of first available write location */
   size_t write_size;
@@ -346,6 +346,7 @@
   pthread_cleanup_pop(0);
 
   DEBUG("Exit submit_data_chunk");
+  return !buf->abort_write;
 }
 
 
@@ -520,8 +521,8 @@
 
 /* --- Data buffering functions --- */
 
-void buffer_submit_data (buf_t *buf, char *data, long nbytes) {
-  submit_data_chunk (buf, data, nbytes);
+int buffer_submit_data (buf_t *buf, char *data, long nbytes) {
+  return submit_data_chunk (buf, data, nbytes);
 }
 
 size_t buffer_get_data (buf_t *buf, char *data, long nbytes)
Index: ogg123/buffer.h
===================================================================
--- ogg123.orig/buffer.h	2008-05-01 19:30:59.000000000 -0700
+++ ogg123/buffer.h	2008-05-01 19:32:34.000000000 -0700
@@ -110,7 +110,7 @@
 void buffer_thread_kill    (buf_t *buf);
 
 /* --- Data buffering functions --- */
-void buffer_submit_data (buf_t *buf, char *data, long nbytes);
+int buffer_submit_data (buf_t *buf, char *data, long nbytes);
 size_t buffer_get_data (buf_t *buf, char *data, long nbytes);
 
 void buffer_mark_eos (buf_t *buf);
Index: ogg123/http_transport.c
===================================================================
--- ogg123.orig/http_transport.c	2008-05-01 19:30:59.000000000 -0700
+++ ogg123/http_transport.c	2008-05-01 19:32:34.000000000 -0700
@@ -68,7 +68,8 @@
   if (myarg->cancel_flag || sig_request.cancel)
     return 0;
 
-  buffer_submit_data(myarg->buf, ptr, size*nmemb);
+  if (!buffer_submit_data(myarg->buf, ptr, size*nmemb))
+    return 0;
 
   if (myarg->cancel_flag || sig_request.cancel)
     return 0;
Index: ogg123/ogg123.c
===================================================================
--- ogg123.orig/ogg123.c	2008-05-01 19:30:59.000000000 -0700
+++ ogg123/ogg123.c	2008-05-01 19:35:12.000000000 -0700
@@ -702,9 +702,13 @@
       do {
 	
 	if (nthc-- == 0) {
-	  if (audio_buffer)
-	    buffer_submit_data(audio_buffer, convbuffer, ret);
-	  else
+	  if (audio_buffer) {
+	    if (!buffer_submit_data(audio_buffer, convbuffer, ret)) {
+	      status_error(_("Error: buffer write failed.\n"));
+	      eof = eos = 1;
+	      break;
+	    }
+	  } else
 	    audio_play_callback(convbuffer, ret, eos, &audio_play_arg);
 	  
 	  nthc = options.nth - 1;