--- linux-2.5.74/sound/core/oss/pcm_oss.c	2003-07-13 04:01:16.000000000 +0200
+++ linux-2.5.74-debug/sound/core/oss/pcm_oss.c	2003-07-13 04:23:52.260709528 +0200
@@ -627,8 +627,21 @@
 			}
 			continue;
 		}
-		if (ret != -ESTRPIPE)
+		if (ret != -ESTRPIPE) {
+			if (runtime->status->state == SNDRV_PCM_STATE_DRAINING) {
+				snd_pcm_status_t status;
+				memset(&status, 0, sizeof(status));
+				int err = snd_pcm_kernel_ioctl(substream, SNDRV_PCM_IOCTL_STATUS, &status);
+				if (!err && status.avail < runtime->period_size) {
+					err = snd_pcm_kernel_ioctl(substream, SNDRV_PCM_IOCTL_PREPARE, 0);
+					if (!err)
+						snd_pcm_start(substream);
+				}
+				if (err < 0)
+					ret = err;
+			}
 			break;
+		}
 	}
 	return ret;
 }
