[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