]> git.webhop.me Git - lcd4linux.git/commitdiff
Make the dbus plugin shutdown without showing dbus leaks when compiled with -DDEBUG
authoredman007 <edman007@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Thu, 19 Nov 2009 04:32:13 +0000 (04:32 +0000)
committeredman007 <edman007@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Thu, 19 Nov 2009 04:32:13 +0000 (04:32 +0000)
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@1066 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

drv_HD44780.c
plugin_dbus.c

index bc3a97e88f953d0f586a868a9a9550fec877e8ea..26f0bc9ade1d27c81d0e3f4f4a81b570222661d0 100644 (file)
@@ -1410,7 +1410,7 @@ int drv_HD_init(const char *section, const int quiet)
     /* initialize generic GPIO driver */
     if ((ret = drv_generic_gpio_init(section, Name)) != 0)
        return ret;
-       
+
 #ifdef WITH_PARPORT
     if ((ret = drv_generic_keypad_init(section, Name)) != 0)
        return ret;
index a7b623ea8bdac4b9e698f1dbf755aec225ed0719..da93949d203d23600ae8671e0f0e49d83bdae558 100644 (file)
@@ -372,6 +372,12 @@ void plugin_exit_dbus(void)
     for (i = dbus_results.signals - 1; i >= 0; i--) {
        clear_signal_txt(i);
     }
+
+#ifdef DEBUG
+    //needs to be called to actually free everything, but might free stuff
+    //mpris_dbus uses and cause a crash on shutdown, enable for leak debugging
+    dbus_shutdown();
+#endif
 }
 
 
@@ -504,7 +510,6 @@ static int lcd_dbus_init(void)
        dbus_error_free(&err);
        success &= 1;
     } else {
-       dbus_connection_ref(sessconn);
        setup_dbus_events(sessconn);
     }
 
@@ -513,7 +518,6 @@ static int lcd_dbus_init(void)
        info("[DBus] Error connecting to the dbus system bus: %s\n", err.message);
        success &= 2;
     } else {
-       dbus_connection_ref(sysconn);
        setup_dbus_events(sysconn);
     }
 
@@ -568,7 +572,6 @@ static void handle_inbound_signal(void *signal, int argc, char **argv)
     if (signal_info->event_name != NULL) {
        named_event_trigger(signal_info->event_name);
     }
-    free_args(argc, argv);
 }
 
 static lcd_sig_t *lcd_register_signal(const char *sender, const char *path,
@@ -804,7 +807,6 @@ static DBusHandlerResult lcd_sig_received(DBusConnection * connection, DBusMessa
 {
     (void) connection;
     dbus_message_ref(msg);
-
     lcd_sig_t *sig = sigv;
     //compare the signal to the one we were assigned
     if (dbus_message_get_type(msg) != DBUS_MESSAGE_TYPE_SIGNAL) {
@@ -817,15 +819,15 @@ static DBusHandlerResult lcd_sig_received(DBusConnection * connection, DBusMessa
        dbus_message_unref(msg);
        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
     }
-
-    char **args;
-    int argc;
-    fill_args(msg, &argc, &args);
-
     //call the users function
     if (sig->callback != NULL) {
+       char **args;
+       int argc;
+       fill_args(msg, &argc, &args);
        sig->callback(sig->user_data, argc, args);
+       free_args(argc, args);
     }
+
     dbus_message_unref(msg);
     return DBUS_HANDLER_RESULT_HANDLED;
 }