mirror of git://git.sysmocom.de/ofono
hfp_ag_bluez5: Add watch for G_IO_HUP when connect
A watch to G_IO_HUP is added to remove the file descriptor when the emulator is automatically disconnected when its GAtServer closes. We use a dupped file descriptor because the events aren't delivered to the file descriptor who originated them.
This commit is contained in:
parent
d062d485d6
commit
9332299bb7
|
@ -59,12 +59,24 @@ static void connection_destroy(gpointer data)
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean io_hup_cb(GIOChannel *io, GIOCondition cond, gpointer data)
|
||||||
|
{
|
||||||
|
char *device = data;
|
||||||
|
|
||||||
|
DBG("Remove %s", device);
|
||||||
|
|
||||||
|
g_hash_table_remove(connection_hash, device);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static DBusMessage *profile_new_connection(DBusConnection *conn,
|
static DBusMessage *profile_new_connection(DBusConnection *conn,
|
||||||
DBusMessage *msg, void *data)
|
DBusMessage *msg, void *data)
|
||||||
{
|
{
|
||||||
DBusMessageIter entry;
|
DBusMessageIter entry;
|
||||||
const char *device;
|
const char *device;
|
||||||
int fd;
|
GIOChannel *io;
|
||||||
|
int fd, fd_dup;
|
||||||
struct ofono_emulator *em;
|
struct ofono_emulator *em;
|
||||||
struct ofono_modem *modem;
|
struct ofono_modem *modem;
|
||||||
|
|
||||||
|
@ -111,6 +123,15 @@ static DBusMessage *profile_new_connection(DBusConnection *conn,
|
||||||
|
|
||||||
ofono_emulator_register(em, fd);
|
ofono_emulator_register(em, fd);
|
||||||
|
|
||||||
|
fd_dup = dup(fd);
|
||||||
|
io = g_io_channel_unix_new(fd_dup);
|
||||||
|
g_io_add_watch_full(io, G_PRIORITY_DEFAULT, G_IO_HUP, io_hup_cb,
|
||||||
|
g_strdup(device), g_free);
|
||||||
|
g_io_channel_unref(io);
|
||||||
|
|
||||||
|
g_hash_table_insert(connection_hash, g_strdup(device),
|
||||||
|
GINT_TO_POINTER(fd_dup));
|
||||||
|
|
||||||
return dbus_message_new_method_return(msg);
|
return dbus_message_new_method_return(msg);
|
||||||
|
|
||||||
invalid:
|
invalid:
|
||||||
|
|
Loading…
Reference in New Issue