Fix module-oss for devices that return EAGAIN when we don't expect it. (Closes #66)
authorLennart Poettering <lennart@poettering.net>
Wed, 23 May 2007 01:02:06 +0000 (01:02 +0000)
committerLennart Poettering <lennart@poettering.net>
Wed, 23 May 2007 01:02:06 +0000 (01:02 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1442 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/modules/module-oss.c

index 965944a..22b12ef 100644 (file)
@@ -169,10 +169,14 @@ static void do_write(struct userdata *u) {
         assert(memchunk->length);
 
         if ((r = pa_iochannel_write(u->io, (uint8_t*) memchunk->memblock->data + memchunk->index, memchunk->length)) < 0) {
-            pa_log("write() failed: %s", pa_cstrerror(errno));
 
-            clear_up(u);
-            pa_module_unload_request(u->module);
+            if (errno != EAGAIN) {
+                pa_log("write() failed: %s", pa_cstrerror(errno));
+                
+                clear_up(u);
+                pa_module_unload_request(u->module);
+            }
+            
             break;
         }
 
@@ -224,11 +228,14 @@ static void do_read(struct userdata *u) {
         assert(memchunk.memblock);
         if ((r = pa_iochannel_read(u->io, memchunk.memblock->data, memchunk.memblock->length)) < 0) {
             pa_memblock_unref(memchunk.memblock);
+            
             if (errno != EAGAIN) {
                 pa_log("read() failed: %s", pa_cstrerror(errno));
+                
                 clear_up(u);
                 pa_module_unload_request(u->module);
             }
+            
             break;
         }