audioac97, audiohda: dont block on close, just pad the last block with zeros
This commit is contained in:
parent
47bb182b5b
commit
866ee3ab5d
2 changed files with 7 additions and 9 deletions
|
@ -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*
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue