audioac97, audiohda: dont block on close, just pad the last block with zeros

This commit is contained in:
cinap_lenrek 2013-01-27 14:00:42 +01:00
parent 47bb182b5b
commit 866ee3ab5d
2 changed files with 7 additions and 9 deletions

View file

@ -390,16 +390,15 @@ ac97close(Audio *adev, int mode)
{ {
Ctlr *ctlr; Ctlr *ctlr;
Ring *ring; Ring *ring;
uchar z[1];
if(mode == OREAD) if(mode == OREAD)
return; return;
z[0] = 0;
ctlr = adev->ctlr; ctlr = adev->ctlr;
ring = &ctlr->outring; ring = &ctlr->outring;
while(ring->wi % Blocksize) while(ring->wi % Blocksize)
ac97write(adev, z, sizeof(z), 0); if(writering(ring, (uchar*)"", 1) <= 0)
break;
} }
static Pcidev* static Pcidev*

View file

@ -1296,7 +1296,7 @@ static void
hdaclose(Audio *adev, int mode) hdaclose(Audio *adev, int mode)
{ {
Ctlr *ctlr; Ctlr *ctlr;
uchar z[1]; Ring *ring;
ctlr = adev->ctlr; ctlr = adev->ctlr;
if(mode == OREAD || mode == ORDWR){ if(mode == OREAD || mode == ORDWR){
@ -1304,11 +1304,10 @@ hdaclose(Audio *adev, int mode)
streamstop(ctlr, &ctlr->sin); streamstop(ctlr, &ctlr->sin);
} }
if(mode == OWRITE || mode == ORDWR){ if(mode == OWRITE || mode == ORDWR){
if(ctlr->sout.active){ ring = &ctlr->sout.ring;
z[0] = 0; while(ring->wi % Blocksize)
while(ctlr->sout.ring.wi % Blocksize) if(writering(ring, (uchar*)"", 1) <= 0)
hdawrite(adev, z, sizeof(z), 0); break;
}
} }
} }