diff --git a/debian/changelog b/debian/changelog index a6efa7b..1e4adb9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,7 @@ usb-moded (0.45) unstable; urgency=low * Only signal MODE_UNDEFINED when we have actually done all the modesetting handling after disconnect. Fixes: NB#273204 * Actually use cdrom timeout + * Clean-up if we change mode before the clean-up timeout expired. Fixes: NB#273493 -- Philippe De Swert Wed, 13 Jul 2011 14:45:42 +0300 diff --git a/src/usb_moded-modules.c b/src/usb_moded-modules.c index ca2254d..8b1bb50 100644 --- a/src/usb_moded-modules.c +++ b/src/usb_moded-modules.c @@ -267,6 +267,8 @@ void check_module_state(const char *module_name) #ifdef NOKIA gboolean usb_cleanup_timeout(gpointer data) { + /* signal usb disconnected */ + usb_moded_send_signal(USB_DISCONNECTED); usb_moded_mode_cleanup(get_usb_module()); usb_moded_module_cleanup(get_usb_module()); set_usb_mode(MODE_UNDEFINED); diff --git a/src/usb_moded-udev.c b/src/usb_moded-udev.c index ac28735..876eb7a 100644 --- a/src/usb_moded-udev.c +++ b/src/usb_moded-udev.c @@ -175,8 +175,8 @@ static void udev_parse(struct udev_device *dev) /* power supply type might not exist also :( Send connected event but this will not be able to discriminate between charger/cable */ log_warning("Fallback since cable detection cannot be accurate. Will connect on any voltage on usb.\n"); - set_usb_connected(TRUE); cable = 1; + set_usb_connected(TRUE); return; } if(!strcmp(tmp, "USB")||!strcmp(tmp, "USB_CDP")) diff --git a/src/usb_moded.c b/src/usb_moded.c index 349d71e..d97d9ae 100644 --- a/src/usb_moded.c +++ b/src/usb_moded.c @@ -130,12 +130,12 @@ static gboolean set_disconnected(gpointer data) if(!get_usb_connection_state()) { log_debug("usb disconnected\n"); - /* signal usb disconnected */ - usb_moded_send_signal(USB_DISCONNECTED); #ifdef NOKIA /* delayed clean-up of state */ timeout_source = g_timeout_add_seconds(3, usb_cleanup_timeout, NULL); #else + /* signal usb disconnected */ + usb_moded_send_signal(USB_DISCONNECTED); /* unload modules and general cleanup */ usb_moded_mode_cleanup(get_usb_module()); usb_moded_module_cleanup(get_usb_module()); @@ -171,6 +171,13 @@ void set_usb_connected_state(void) if(mode_to_set) #endif /* NOKIA */ { +#ifdef NOKIA + /* If we switch to another mode than the one that is still set before the + clean-up timeout expired we need to clean up */ + if(strcmp(mode_to_set, get_usb_mode())) + usb_moded_mode_cleanup(get_usb_module()); +#endif /* NOKIA */ + if(!strcmp(MODE_ASK, mode_to_set)) { /* send signal, mode will be set when the dialog service calls