diff --git a/sndiod/siofile.c b/sndiod/siofile.c index e1f3542..8cb2827 100644 --- a/sndiod/siofile.c +++ b/sndiod/siofile.c @@ -376,18 +376,18 @@ siofile_run(void *arg) if (!siofile_rec(f)) return; #ifdef DEBUG - if (f->rused < d->round) { + f->rused -= d->round; + if (f->rused >= d->round) { siofile_log(f); - log_puts(": missed clock tick, rused = "); + log_puts(": rec hw xrun, rused = "); log_puti(f->rused); log_puts("/"); log_puti(d->bufsz); log_puts("\n"); panic(); } - f->rused -= d->round; - if (f->rused < 0) { - /* rec buffer size is not known */ + if (f->rused < 0 || f->rused >= d->bufsz) { + /* device driver or libsndio bug */ siofile_log(f); log_puts(": out of bounds rused = "); log_puti(f->rused); @@ -415,7 +415,7 @@ siofile_run(void *arg) return; #ifdef DEBUG f->pused += d->round; - if (d->prime == 0 && f->pused < d->bufsz - d->round) { + if (d->prime == 0 && f->pused <= d->bufsz - d->round) { siofile_log(f); log_puts(": play hw xrun, pused = "); log_puti(f->pused); @@ -424,7 +424,7 @@ siofile_run(void *arg) log_puts("\n"); } if (f->pused < 0 || f->pused > d->bufsz) { - /* this is a device drivers or libsndio bug */ + /* device driver or libsndio bug */ siofile_log(f); log_puts(": out of bounds pused = "); log_puti(f->pused);