All of lore.kernel.org
 help / color / mirror / Atom feed
* return value of snd_pcm_wait()
@ 2003-07-14 14:24 Takashi Iwai
  2003-07-14 14:39 ` Jaroslav Kysela
  0 siblings, 1 reply; 2+ messages in thread
From: Takashi Iwai @ 2003-07-14 14:24 UTC (permalink / raw)
  To: alsa-devel

[-- Attachment #1: Type: text/plain, Size: 489 bytes --]

Hi,

currently, snd_pcm_wait() returns -EIO if any error happens during
poll(), regardless what really happened.
i believe it's better to return a reasonable error code corresponding
to the current state, such as -EPIPE and -ESTRPIPE.

the attached patch adds this feature by calling snd_pcm_state() in
snd_pcm_wait().  this cleans up also some codes there.

i think there is no major drawback by this change.  but i'd like to
ask here to make it sure.

do you see any problems?


Takashi

[-- Attachment #2: pcm-wait-fix.dif --]
[-- Type: application/octet-stream, Size: 1767 bytes --]

Index: alsa-lib/src/pcm/pcm.c
===================================================================
RCS file: /suse/tiwai/cvs/alsa/alsa-lib/src/pcm/pcm.c,v
retrieving revision 1.134
diff -u -r1.134 pcm.c
--- alsa-lib/src/pcm/pcm.c	24 Jun 2003 10:03:53 -0000	1.134
+++ alsa-lib/src/pcm/pcm.c	14 Jul 2003 14:20:29 -0000
@@ -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;
 			
 		}

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: return value of snd_pcm_wait()
  2003-07-14 14:24 return value of snd_pcm_wait() Takashi Iwai
@ 2003-07-14 14:39 ` Jaroslav Kysela
  0 siblings, 0 replies; 2+ messages in thread
From: Jaroslav Kysela @ 2003-07-14 14:39 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel@lists.sourceforge.net

On Mon, 14 Jul 2003, Takashi Iwai wrote:

> Hi,
> 
> currently, snd_pcm_wait() returns -EIO if any error happens during
> poll(), regardless what really happened.
> i believe it's better to return a reasonable error code corresponding
> to the current state, such as -EPIPE and -ESTRPIPE.
> 
> the attached patch adds this feature by calling snd_pcm_state() in
> snd_pcm_wait().  this cleans up also some codes there.
> 
> i think there is no major drawback by this change.  but i'd like to
> ask here to make it sure.

This change is ok for me.

						Jaroslav

-----
Jaroslav Kysela <perex@suse.cz>
Linux Kernel Sound Maintainer
ALSA Project, SuSE Labs



-------------------------------------------------------
This SF.Net email sponsored by: Parasoft
Error proof Web apps, automate testing & more.
Download & eval WebKing and get a free book.
www.parasoft.com/bulletproofapps1

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-07-14 14:39 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-07-14 14:24 return value of snd_pcm_wait() Takashi Iwai
2003-07-14 14:39 ` Jaroslav Kysela

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.