Subject: audio fail
To: None <tech-kern@netbsd.org>
From: Iain Hibbert <plunky@rya-online.net>
List: tech-kern
Date: 09/24/2006 12:39:52
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--0-1642176298-1158961696=:228
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.NEB.4.64.0609222259451.482@localhost.>

Hi,
   I find a lack in the audio(4) layer with regards to bluetooth audio -
the way I worked it was that if the bluetooth device goes out of range or
turns off or whatever, the connection is lost and btsco(4) returns an
error from the start_input()/start_output() functions - currently this
error does not get propagated to userland but is lost in the interrupt
handler, and the audio layer continues looping without realising that it
has occurred (eg in audio_read() or audio_write())

The attached patch does seem to handle the problem, and when using
audioplay/audiorecord in conjunction with bthset(1) it fails cleanly as
the connection is lost.

Would this be the correct way to handle this?

In fact, I'm not sure its the whole story - I have a partial application
that would like to sit in a poll() loop copying data to/from a real audio
device (for handsfree, code attached) and it doesnt ever get notified that
there is an error - currently it relies on detecting a write error,
whereas I would prefer to generate a POLLIN event as would happen when a
socket is closed (or at least a POLLERR)

In audio_rint() a selnotify is triggered at the appropriate time, so I'm
not really sure why it doesnt happen - any ideas?

iain
--0-1642176298-1158961696=:228
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME=audio.diff
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.64.0609222248160.228@localhost.>
Content-Description: audio patch
Content-Disposition: ATTACHMENT; FILENAME=audio.diff

LS0tIC91c3Ivc3JjL3N5cy9kZXYvYXVkaW92YXIuaAkyMDA2LTA2LTE5IDIy
OjIzOjUyLjAwMDAwMDAwMCArMDEwMA0KKysrIGF1ZGlvdmFyLmgJMjAwNi0w
OS0yMiAyMjoyMTowMC4wMDAwMDAwMDAgKzAxMDANCkBAIC0yMTIsNiArMjEy
LDkgQEANCiAJaW50CQlzY19vcGVuY250Ow0KIAlib29sZWFuX3QJc2NfZHlp
bmc7DQogDQorCWludAkJc2NfcmVycjsJLyogYXVkaW9fcmludCBlcnJvciAq
Lw0KKwlpbnQJCXNjX3BlcnI7CS8qIGF1ZGlvX3BpbnQgZXJyb3IgKi8NCisN
CiAjaWZkZWYgQVVESU9fSU5UUl9USU1FDQogCXVfbG9uZwlzY19wZmlyc3Rp
bnRyOwkvKiBmaXJzdCB0aW1lIHdlIHNhdyBhIHBsYXkgaW50ZXJydXB0ICov
DQogCWludAlzY19wbmludHI7CS8qIG51bWJlciBvZiBpbnRlcnJ1cHRzICov
DQotLS0gL3Vzci9zcmMvc3lzL2Rldi9hdWRpby5jCTIwMDYtMDktMDkgMTc6
NDI6NDEuMDAwMDAwMDAwICswMTAwDQorKysgYXVkaW8uYwkyMDA2LTA5LTIy
IDIyOjIyOjEzLjAwMDAwMDAwMCArMDEwMA0KQEAgLTEzNDIsNiArMTM0Miw4
IEBADQogCXNjLT5zY19wYnVzID0gRkFMU0U7DQogCXNjLT5zY19lb2YgPSAw
Ow0KIAlzYy0+c2NfcGxheWRyb3AgPSAwOw0KKwlzYy0+c2NfcmVyciA9IDA7
DQorCXNjLT5zY19wZXJyID0gMDsNCiANCiAJc2MtPnNjX2Z1bGxfZHVwbGV4
ID0gDQogCQkoZmxhZ3MgJiAoRldSSVRFfEZSRUFEKSkgPT0gKEZXUklURXxG
UkVBRCkgJiYNCkBAIC0xNTg4LDYgKzE1OTAsMTAgQEANCiAJCQkJZXJyb3Ig
PSBhdWRpb19zbGVlcCgmc2MtPnNjX3JjaGFuLCAiYXVkX2hyIik7DQogCQkJ
CWlmIChzYy0+c2NfZHlpbmcpDQogCQkJCQllcnJvciA9IEVJTzsNCisJCQkJ
aWYgKHNjLT5zY19yZXJyKSB7DQorCQkJCQllcnJvciA9IHNjLT5zY19yZXJy
Ow0KKwkJCQkJc2MtPnNjX3JlcnIgPSAwOw0KKwkJCQl9DQogCQkJCWlmIChl
cnJvcikgew0KIAkJCQkJc3BseChzKTsNCiAJCQkJCXJldHVybiBlcnJvcjsN
CkBAIC0xNjIzLDYgKzE2MjksMTAgQEANCiAJCQllcnJvciA9IGF1ZGlvX3Ns
ZWVwKCZzYy0+c2NfcmNoYW4sICJhdWRfcmQiKTsNCiAJCQlpZiAoc2MtPnNj
X2R5aW5nKQ0KIAkJCQllcnJvciA9IEVJTzsNCisJCQlpZiAoc2MtPnNjX3Jl
cnIpIHsNCisJCQkJZXJyb3IgPSBzYy0+c2NfcmVycjsNCisJCQkJc2MtPnNj
X3JlcnIgPSAwOw0KKwkJCX0NCiAJCQlpZiAoZXJyb3IpIHsNCiAJCQkJc3Bs
eChzKTsNCiAJCQkJcmV0dXJuIGVycm9yOw0KQEAgLTE5MDcsNiArMTkxNywx
MCBAQA0KIAkJCWVycm9yID0gYXVkaW9fc2xlZXAoJnNjLT5zY193Y2hhbiwg
ImF1ZF93ciIpOw0KIAkJCWlmIChzYy0+c2NfZHlpbmcpDQogCQkJCWVycm9y
ID0gRUlPOw0KKwkJCWlmIChzYy0+c2NfcGVycikgew0KKwkJCQllcnJvciA9
IHNjLT5zY19wZXJyOw0KKwkJCQlzYy0+c2NfcGVyciA9IDA7DQorCQkJfQ0K
IAkJCWlmIChlcnJvcikgew0KIAkJCQlzcGx4KHMpOw0KIAkJCQlyZXR1cm4g
ZXJyb3I7DQpAQCAtMjYwOCw4ICsyNjIyLDggQEANCiAJCWVycm9yID0gaHct
PnN0YXJ0X291dHB1dChzYy0+aHdfaGRsLCBfX1VOQ09OU1QoY2ItPnMub3V0
cCksDQogCQkgICAgYmxrc2l6ZSwgYXVkaW9fcGludCwgKHZvaWQgKilzYyk7
DQogCQlpZiAoZXJyb3IpIHsNCi0JCQkvKiBYWFggZG9lcyB0aGlzIHJlYWxs
eSBoZWxwPyAqLw0KIAkJCURQUklOVEYoKCJhdWRpb19waW50IHJlc3RhcnQg
ZmFpbGVkOiAlZFxuIiwgZXJyb3IpKTsNCisJCQlzYy0+c2NfcGVyciA9IGVy
cm9yOw0KIAkJCWF1ZGlvX2NsZWFyKHNjKTsNCiAJCX0NCiAJfQ0KQEAgLTI3
MzQsOCArMjc0OCw4IEBADQogCQllcnJvciA9IGh3LT5zdGFydF9pbnB1dChz
Yy0+aHdfaGRsLCBjYi0+cy5pbnAsIGJsa3NpemUsDQogCQkgICAgYXVkaW9f
cmludCwgKHZvaWQgKilzYyk7DQogCQlpZiAoZXJyb3IpIHsNCi0JCQkvKiBY
WFggZG9lcyB0aGlzIHJlYWxseSBoZWxwPyAqLw0KIAkJCURQUklOVEYoKCJh
dWRpb19yaW50OiByZXN0YXJ0IGZhaWxlZDogJWRcbiIsIGVycm9yKSk7DQor
CQkJc2MtPnNjX3JlcnIgPSBlcnJvcjsNCiAJCQlhdWRpb19jbGVhcihzYyk7
DQogCQl9DQogCX0NCg==

--0-1642176298-1158961696=:228
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=audio.c
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.64.0609241239520.1314@localhost.>
Content-Description: audio copy in poll
Content-Disposition: attachment; filename=audio.c

LyotDQogKiBDb3B5cmlnaHQgKGMpIDIwMDYgSWFpbiBIaWJiZXJ0DQogKiBB
bGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dA0KICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQogKiBhcmUgbWV0Og0K
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4NCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlDQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
Lg0KICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQogKiAgICBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4NCiAqDQogKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQ
UkVTUyBPUg0KICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUw0KICog
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4NCiAqIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwNCiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVA0KICogTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZDQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQogKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YNCiAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuDQogKi8NCg0KI2luY2x1ZGUgPHN5cy9hdWRpb2lvLmg+DQojaW5jbHVk
ZSA8c3lzL2lvY3RsLmg+DQoNCiNpbmNsdWRlIDxlcnIuaD4NCiNpbmNsdWRl
IDxlcnJuby5oPg0KI2luY2x1ZGUgPGZjbnRsLmg+DQojaW5jbHVkZSA8cG9s
bC5oPg0KI2luY2x1ZGUgPHNpZ25hbC5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+
DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQoN
CiNpbmNsdWRlICJidGhmcC5oIg0KDQpzdGF0aWMgdm9pZCBkb19zaWduYWwo
aW50KTsNCnN0YXRpYyBpbnQgb3Blbl9hdWRpbyhjb25zdCBjaGFyICopOw0K
c3RhdGljIGludCBjb3B5X2RhdGEoaW50LCBpbnQpOw0KDQovKg0KICogV2Ug
YXJlIHRoZSBjaGlsZCBwcm9jZXNzLg0KICoNCiAqIE91ciBqb2IgaXMgdG8g
b3BlbiB0aGUgaGFuZHNmcmVlIGF1ZGlvIGRldmljZSwgd2hpY2ggd2lsbCBi
bG9jayB1bnRpbA0KICogdGhlIEF1ZGlvIEdhdGV3YXkgb3BlbnMgdGhlIGNv
bm5lY3Rpb24uIFRoZW4sIHdlIG9wZW4gdGhlIHJlYWwgYXVkaW8NCiAqIGRl
dmljZSBhbmQgY29weSBzb3VuZHMgZWFjaCB3YXkgdW50aWwgdGhlIGhhbmRz
ZnJlZSBkZXZpY2UgZHJvcHMgdGhlIA0KICogY29ubmVjdGlvbi4NCiAqDQog
KiBSaW5zZSBhbmQgUmVwZWF0IHVudGlsIHRoZSBmYXQgY29udHJvbGxlciBz
ZW5kcyBhIFNJR0hVUC4NCiAqLw0Kdm9pZA0KYXVkaW9fYmFieSh2b2lkKQ0K
ew0KCXN0cnVjdCBzaWdhY3Rpb24gc2E7DQoJc3RydWN0IHBvbGxmZCBmZHNb
Ml07DQoNCgltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsNCglzYS5zYV9o
YW5kbGVyID0gZG9fc2lnbmFsOw0KDQoJaWYgKHNpZ2FjdGlvbihTSUdIVVAs
ICZzYSwgTlVMTCkgPCAwKQ0KCQlfZXhpdChFWElUX0ZBSUxVUkUpOw0KDQoJ
Zm9yICg7Oykgew0KCQlmZHNbMF0uZXZlbnRzID0gUE9MTElOIHwgUE9MTEVS
UiB8IFBPTExIVVA7DQoJCWZkc1swXS5mZCA9IG9wZW5fYXVkaW8oaGFuZHNm
cmVlKTsJLyogYmxvY2tzICovDQoJCWlmIChmZHNbMF0uZmQgPCAwKSB7DQoJ
CQl3YXJuKCIlcyIsIGhhbmRzZnJlZSk7DQoJCQlicmVhazsNCgkJfQ0KDQoJ
CWZkc1sxXS5ldmVudHMgPSBQT0xMSU4gfCBQT0xMRVJSIHwgUE9MTEhVUDsN
CgkJZmRzWzFdLmZkID0gb3Blbl9hdWRpbyhzcGVha2VyKTsNCgkJaWYgKGZk
c1sxXS5mZCA8IDApIHsNCgkJCXdhcm4oIiVzIiwgc3BlYWtlcik7DQoJCQli
cmVhazsNCgkJfQ0KDQoJCWZwcmludGYoc3RkZXJyLCAiQXVkaW8gQ29ubmVj
dGlvbiBlc3RhYmxpc2hlZFxuIik7DQoNCgkJZm9yICg7Oykgew0KCQkJZmRz
WzBdLnJldmVudHMgPSAwOw0KCQkJZmRzWzFdLnJldmVudHMgPSAwOw0KDQoJ
CQlpZiAocG9sbChmZHMsIDIsIElORlRJTSkgPCAwKQ0KCQkJCWJyZWFrOw0K
DQoJCQlpZiAoKGZkc1swXS5yZXZlbnRzICYmIGNvcHlfZGF0YShmZHNbMF0u
ZmQsIGZkc1sxXS5mZCkgPCAwKSkNCgkJCQlicmVhazsNCg0KCQkJaWYgKChm
ZHNbMV0ucmV2ZW50cyAmJiBjb3B5X2RhdGEoZmRzWzFdLmZkLCBmZHNbMF0u
ZmQpIDwgMCkpDQoJCQkJYnJlYWs7DQoJCX0NCg0KCQlmcHJpbnRmKHN0ZGVy
ciwgIkF1ZGlvIENvbm5lY3Rpb24gcmVsZWFzZWRcbiIpOw0KDQoJCWNsb3Nl
KGZkc1swXS5mZCk7DQoJCWNsb3NlKGZkc1sxXS5mZCk7DQoJfQ0KDQoJX2V4
aXQoRVhJVF9GQUlMVVJFKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmRvX3NpZ25h
bChpbnQgcykNCnsNCg0KCXN3aXRjaCAocykgew0KCWNhc2UgU0lHSFVQOg0K
CWRlZmF1bHQ6DQoJCV9leGl0KEVYSVRfU1VDQ0VTUyk7DQoJfQ0KfQ0KDQov
Kg0KICogT3BlbiBBdWRpbyBkZXZpY2UgDQogKi8NCnN0YXRpYyBpbnQNCm9w
ZW5fYXVkaW8oY29uc3QgY2hhciAqbmFtZSkNCnsNCglhdWRpb19pbmZvX3QJ
aW5mbzsNCglpbnQJCWZkLCBuOw0KDQoJZmQgPSBvcGVuKG5hbWUsIE9fUkRX
UiwgMCk7DQoJaWYgKGZkIDwgMCkNCgkJcmV0dXJuIC0xOw0KDQoJaWYgKGZj
bnRsKGZkLCBGX1NFVEZMLCBPX05PTkJMT0NLIHwgT19BU1lOQykgPCAwKQ0K
CQlyZXR1cm4gLTE7DQoNCgluID0gMTsJLyogc2V0IGZ1bGwgZHVwbGV4ICov
DQoJaWYgKGlvY3RsKGZkLCBBVURJT19TRVRGRCwgJm4pIDwgMCkNCgkJcmV0
dXJuIC0xOw0KDQoJLyoNCgkgKiBzZXQgcGxheSBhbmQgcmVjb3JkIG1vZGVz
IG9mDQoJICoJOGtIeiAxNi1iaXQgc2xpbmVhciBtb25vDQoJICovDQoJaWYg
KGlvY3RsKGZkLCBBVURJT19HRVRJTkZPLCAmaW5mbykgPCAwKQ0KCQlyZXR1
cm4gLTE7DQoNCglpbmZvLm1vZGUgPSAoQVVNT0RFX1BMQVkgfCBBVU1PREVf
UkVDT1JEKTsNCg0KCWluZm8ucGxheS5zYW1wbGVfcmF0ZSA9IDgwMDA7DQoJ
aW5mby5wbGF5LmNoYW5uZWxzID0gMTsNCglpbmZvLnBsYXkucHJlY2lzaW9u
ID0gMTY7DQoJaW5mby5wbGF5LmVuY29kaW5nID0gQVVESU9fRU5DT0RJTkdf
U0xJTkVBUl9MRTsNCg0KCWluZm8ucmVjb3JkLnNhbXBsZV9yYXRlID0gODAw
MDsNCglpbmZvLnJlY29yZC5jaGFubmVscyA9IDE7DQoJaW5mby5yZWNvcmQu
cHJlY2lzaW9uID0gMTY7DQoJaW5mby5yZWNvcmQuZW5jb2RpbmcgPSBBVURJ
T19FTkNPRElOR19TTElORUFSX0xFOw0KDQoJaWYgKGlvY3RsKGZkLCBBVURJ
T19TRVRJTkZPLCAmaW5mbykgPCAwKQ0KCQlyZXR1cm4gLTE7DQoNCglyZXR1
cm4gZmQ7DQp9DQoNCi8qDQogKiBDb3B5IGF1ZGlvIGRhdGEgZnJvbSBzcmMg
dG8gZHN0IGZpbGUgZGVzY3JpcHRvci4NCiAqLw0KaW50DQpjb3B5X2RhdGEo
aW50IHNyYywgaW50IGRzdCkNCnsNCglzdGF0aWMgY2hhcglidWZbNDA5Nl07
DQoJc3NpemVfdAkJbGVuOw0KDQoJZm9yICg7Oykgew0KCQlsZW4gPSByZWFk
KHNyYywgYnVmLCBzaXplb2YoYnVmKSk7DQoJCWlmIChsZW4gPT0gMCkNCgkJ
CXJldHVybiAtMTsNCg0KCQlpZiAobGVuIDwgMCkgew0KCQkJaWYgKGVycm5v
ICE9IEVBR0FJTikNCgkJCQlyZXR1cm4gLTE7DQoNCgkJCWJyZWFrOw0KCQl9
DQoNCgkJaWYgKHdyaXRlKGRzdCwgYnVmLCBsZW4pICE9IGxlbikNCgkJCXJl
dHVybiAtMTsNCgl9DQoNCglyZXR1cm4gMDsNCn0NCg==

--0-1642176298-1158961696=:228--