From c28669fd698337cf04054a60aa78d1db5f460b5d Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Tue, 19 Apr 2011 13:38:10 +0300 Subject: [PATCH] Fix not waiting for POLLERR when disconnecting SCO To make sure the SCO link is really disconnected we should wait for POLLERR since POLLHUP does not necessarily means the link is completely disconnected just that no further data can be sent/received. Note that this depend on a fix of SCO socket shutdown in kernel to wait for disconnect confimation to then kill/destroy the socket indicating the err/reason using POLLERR. --- audio/headset.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/audio/headset.c b/audio/headset.c index 2e4f6ca3a..33c3d8508 100644 --- a/audio/headset.c +++ b/audio/headset.c @@ -2550,8 +2550,11 @@ void headset_set_state(struct audio_device *dev, headset_state_t state) emit_property_changed(dev->conn, dev->path, AUDIO_HEADSET_INTERFACE, "State", DBUS_TYPE_STRING, &state_str); + + /* Do not watch HUP since we need to know when the link is + really disconnected */ hs->sco_id = g_io_add_watch(hs->sco, - G_IO_ERR | G_IO_HUP | G_IO_NVAL, + G_IO_ERR | G_IO_NVAL, (GIOFunc) sco_cb, dev); g_dbus_emit_signal(dev->conn, dev->path, -- 2.47.3