Update of /cvsroot/alsa/alsa-lib/src/pcm
In directory sc8-pr-cvs1:/tmp/cvs-serv11592

Modified Files:
        pcm.c 
Log Message:
- snd_pcm_wait() returns more understandable error code when an error
  happens during poll().
- clean up the code along with the change above.



Index: pcm.c
===================================================================
RCS file: /cvsroot/alsa/alsa-lib/src/pcm/pcm.c,v
retrieving revision 1.256
retrieving revision 1.257
diff -u -r1.256 -r1.257
--- pcm.c       22 Jun 2003 09:59:03 -0000      1.256
+++ pcm.c       16 Jul 2003 11:37:25 -0000      1.257
@@ -2000,6 +2000,7 @@
  * \param pcm PCM handle
  * \param timeout maximum time in milliseconds to wait
  * \return a positive value on success otherwise a negative error code
+ *         (-EPIPE for the xrun and -ESTRPIPE for the suspended status) 
  * \retval 0 timeout occurred
  * \retval 1 PCM stream is ready for I/O
  */
@@ -2016,8 +2017,17 @@
        err = snd_pcm_poll_descriptors_revents(pcm, &pfd, 1, &revents);
        if (err < 0)
                return err;
-       if (revents & (POLLERR | POLLNVAL))
-               return -EIO;
+       if (revents & (POLLERR | POLLNVAL)) {
+               /* check more precisely */
+               switch (snd_pcm_state(pcm)) {
+               case SND_PCM_STATE_XRUN:
+                       return -EPIPE;
+               case SND_PCM_STATE_SUSPENDED:
+                       return -ESTRPIPE;
+               default:
+                       return -EIO;
+               }
+       }
        return err > 0 ? 1 : 0;
 }
 
@@ -6110,15 +6120,8 @@
                        }
 
                        err = snd_pcm_wait(pcm, -1);
-                       state = snd_pcm_state(pcm);
-                       if (err < 0) {
-                               /* check more precisely */
-                               if (state == SND_PCM_STATE_XRUN)
-                                       err = -EPIPE;
-                               else if (state == SND_PCM_STATE_SUSPENDED)
-                                       err = -ESTRPIPE;
+                       if (err < 0)
                                break;
-                       }
                        goto _again;
                        
                }
@@ -6187,15 +6190,8 @@
                        }
 
                        err = snd_pcm_wait(pcm, -1);
-                       state = snd_pcm_state(pcm);
-                       if (err < 0) {
-                               /* check more precisely */
-                               if (state == SND_PCM_STATE_XRUN)
-                                       err = -EPIPE;
-                               else if (state == SND_PCM_STATE_SUSPENDED)
-                                       err = -ESTRPIPE;
+                       if (err < 0)
                                break;
-                       }
                        goto _again;
                        
                }



-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the
same time. Free trial click here: http://www.vmware.com/wl/offer/345/0
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to