Clean up device listeners from disconnected applications
authorMike Gorse <mgorse@novell.com>
Mon, 29 Aug 2011 02:32:45 +0000 (21:32 -0500)
committerMike Gorse <mgorse@novell.com>
Mon, 29 Aug 2011 02:32:45 +0000 (21:32 -0500)
registryd/deviceeventcontroller.c
registryd/registry.c

index 677163f..ecaa872 100644 (file)
@@ -2069,7 +2069,7 @@ spi_deregister_controller_key_listener (SpiDEController            *controller,
   RemoveListenerClosure  ctx;
 
   ctx.bus = controller->bus;
-  ctx.listener = (DEControllerListener *) key_listener;
+  ctx.listener = (DEControllerListener *) spi_key_listener_clone (key_listener);
 
   /* special case, copy keyset from existing controller list entry */
   if (g_slist_length(key_listener->keys) == 0)
@@ -2083,6 +2083,7 @@ spi_deregister_controller_key_listener (SpiDEController            *controller,
   spi_re_entrant_list_foreach (&controller->key_listeners,
                                remove_listener_cb, &ctx);
 
+  spi_key_listener_clone_free ((DEControllerKeyListener *) ctx.listener);
 }
 
 void
index 5431b46..d2025a3 100644 (file)
@@ -293,8 +293,7 @@ handle_disconnection (DBusConnection *bus, DBusMessage *message, void *user_data
               SpiReference *ref  = g_ptr_array_index (reg->apps, i);
               while (!g_strcmp0 (old, ref->name))
                 {
-                  children_removed_listener (bus, i, old, ref->path);
-                  g_ptr_array_remove_index (reg->apps, i);
+                  remove_application (reg, bus, i);
                 }
             }