]> git.lizzy.rs Git - plan9front.git/commitdiff
audioac97, audiohda: dont block on close, just pad the last block with zeros
authorcinap_lenrek <cinap_lenrek@gmx.de>
Sun, 27 Jan 2013 13:00:42 +0000 (14:00 +0100)
committercinap_lenrek <cinap_lenrek@gmx.de>
Sun, 27 Jan 2013 13:00:42 +0000 (14:00 +0100)
sys/src/9/pc/audioac97.c
sys/src/9/pc/audiohda.c

index 3149458ad08a6e0fbd14e7ac7951564e80ec24fa..4773248707b67dee0084f3cafcb8897a5c092f6a 100644 (file)
@@ -390,16 +390,15 @@ ac97close(Audio *adev, int mode)
 {
        Ctlr *ctlr;
        Ring *ring;
-       uchar z[1];
 
        if(mode == OREAD)
                return;
 
-       z[0] = 0;
        ctlr = adev->ctlr;
        ring = &ctlr->outring;
        while(ring->wi % Blocksize)
-               ac97write(adev, z, sizeof(z), 0);
+               if(writering(ring, (uchar*)"", 1) <= 0)
+                       break;
 }
 
 static Pcidev*
index b29cb04e81b3d00c6d63b73e4c8cf981eae4c0e0..d7e862eb9ba7b15035ad72488677b4b30adc61af 100644 (file)
@@ -1296,7 +1296,7 @@ static void
 hdaclose(Audio *adev, int mode)
 {
        Ctlr *ctlr;
-       uchar z[1];
+       Ring *ring;
 
        ctlr = adev->ctlr;
        if(mode == OREAD || mode == ORDWR){
@@ -1304,11 +1304,10 @@ hdaclose(Audio *adev, int mode)
                        streamstop(ctlr, &ctlr->sin);
        }
        if(mode == OWRITE || mode == ORDWR){
-               if(ctlr->sout.active){
-                       z[0] = 0;
-                       while(ctlr->sout.ring.wi % Blocksize)
-                               hdawrite(adev, z, sizeof(z), 0);
-               }
+               ring = &ctlr->sout.ring;
+               while(ring->wi % Blocksize)
+                       if(writering(ring, (uchar*)"", 1) <= 0)
+                               break;
        }
 }