abuf_flush() must be called only from the ``xxx_in()'' routines (ie
authorratchov <ratchov@openbsd.org>
Wed, 20 Aug 2008 14:22:50 +0000 (14:22 +0000)
committerratchov <ratchov@openbsd.org>
Wed, 20 Aug 2008 14:22:50 +0000 (14:22 +0000)
triggered by POLLIN condition).

mix_pushzero() is not called from the ``xxx_in()'' chain, but calls
abuf_flush() resulting in bad initialization of the mixer, which
will lead to a deadlock at some point.

ok jakemsr

usr.bin/aucat/aproc.c

index 8fa5c7a..fdace66 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: aproc.c,v 1.10 2008/08/14 09:58:55 ratchov Exp $      */
+/*     $OpenBSD: aproc.c,v 1.11 2008/08/20 14:22:50 ratchov Exp $      */
 /*
  * Copyright (c) 2008 Alexandre Ratchov <alex@caoua.org>
  *
@@ -474,7 +474,7 @@ mix_pushzero(struct aproc *p)
 
        abuf_wcommit(obuf, obuf->mixtodo);
        obuf->mixtodo = 0;
-       abuf_flush(obuf);
+       abuf_run(obuf);
        mix_bzero(p);
 }