[asterisk-dev] Rawplayer fix

Bruno Rocha bruno at 3gnt.net
Mon Mar 13 05:39:50 MST 2006


Hi!

While using rawplayer to play asterisk sounds, I've notice that when
Asterisk dies unexpectedly, rawplayer stays running and consuming
all the available CPU.

This patch fixes that problem:


--- contrib/utils/rawplayer.c.original	2005-11-29 18:24:39.000000000 +0000
+++ contrib/utils/rawplayer.c	2006-03-13 11:43:29.000000000 +0000
@@ -1,6 +1,10 @@
  /*
    Rawplayer.c simple raw file stdout player
    (c) Anthony C Minessale II <anthmct at yahoo.com>
+
+  2006-03-10: Bruno Rocha <bruno at 3gnt.net>
+  - include <stdlib.h> to remove compiler warning on some platforms
+  - check for read/write errors (avoid 100% CPU usage in some asterisk 
failures)
  */

  #define BUFLEN 320
@@ -8,21 +12,25 @@
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <fcntl.h>
+#include <stdlib.h>

  static int deliver_file(char *path, int fdout) {
-	int fd = 0, bytes = 0;
+	int fd = 0, bytes = 0, error = 0;
  	short buf[BUFLEN];

  	if ((fd = open(path,O_RDONLY))) {
-		while ((bytes=read(fd, buf, BUFLEN))) {
-			write(fdout, buf, bytes);
+		while ((bytes=read(fd, buf, BUFLEN)) > 0) {
+			if(write(fdout, buf, bytes) < 0){
+				error = -2;
+				break;
+			}
  		}
  		if(fd)
  			close(fd);
  	} else
  		return -1;
  	
-	return 0;
+	return error;
  }



Please someone apply it. I want to bypass the code submitting
procedure :)

Regards,
-- 
Bruno Rocha



More information about the asterisk-dev mailing list