OSDN Git Service

Fix snd_pcm_write*() return values at start up
authorTakashi Iwai <tiwai@suse.de>
Fri, 24 Mar 2006 14:41:40 +0000 (14:41 +0000)
committerTakashi Iwai <tiwai@suse.de>
Fri, 24 Mar 2006 14:41:40 +0000 (14:41 +0000)
If an error occurs at starting the stream, snd_pcm_write*() should return
an error value instead of the size to be written.

src/pcm/pcm.c

index 4aff03d..91fc63e 100644 (file)
@@ -6494,9 +6494,6 @@ snd_pcm_sframes_t snd_pcm_write_areas(snd_pcm_t *pcm, const snd_pcm_channel_area
                if (err < 0)
                        break;
                frames = err;
-               offset += frames;
-               size -= frames;
-               xfer += frames;
                if (state == SND_PCM_STATE_PREPARED) {
                        snd_pcm_sframes_t hw_avail = pcm->buffer_size - avail;
                        hw_avail += frames;
@@ -6509,6 +6506,9 @@ snd_pcm_sframes_t snd_pcm_write_areas(snd_pcm_t *pcm, const snd_pcm_channel_area
                                        goto _end;
                        }
                }
+               offset += frames;
+               size -= frames;
+               xfer += frames;
        }
  _end:
        return xfer > 0 ? (snd_pcm_sframes_t) xfer : snd_pcm_check_error(pcm, err);