]> git.webhop.me Git - lcd4linux.git/commitdiff
Fixed a few more leaks,
authoredman007 <edman007@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Tue, 17 Nov 2009 04:01:50 +0000 (04:01 +0000)
committeredman007 <edman007@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Tue, 17 Nov 2009 04:01:50 +0000 (04:01 +0000)
Valgrind no longers reports any leaks in plugin_dbus.c
(though there are still a few in the dbus libs)

git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@1058 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

plugin_dbus.c

index af5cfc1276dda8f7fbc07d1e07888f7eac076d78..a7b623ea8bdac4b9e698f1dbf755aec225ed0719 100644 (file)
@@ -143,6 +143,7 @@ static void free_args(int argc, char **argv);
 static int lcd_dbus_init(void);
 
 static void handle_inbound_signal(void *signal, int argc, char **argv);
+static void free_handle_signal(handle_signal_t * sig);
 
 //given a signal, will add a hook so when the signal appears your callback is called
 static lcd_sig_t *lcd_register_signal(const char *sender, const char *path,
@@ -178,11 +179,17 @@ static int clear_signal_txt(const int sig)
     if (s == NULL) {
        return 1;
     }
-    s->argc = 0;
+    int i;
     if (s->arguments != NULL) {
+       for (i = 0; i < s->argc; i++) {
+           if (s->arguments[i] != NULL) {
+               free(s->arguments[i]);
+           }
+       }
        free(s->arguments);
        s->arguments = NULL;
     }
+    s->argc = 0;
     return 0;
 }
 
@@ -309,17 +316,26 @@ static void load_dbus_cfg(void)
            sig_info->event_name = strdup(eventname);
        }
 
-       if (!lcd_register_signal(sender, path, interface, member, handle_inbound_signal, sig_info, free)) {
+       if (!lcd_register_signal(sender, path, interface, member, handle_inbound_signal,
+                                sig_info, (void (*)(void *)) free_handle_signal)) {
            error("[DBus] Error Registering signal %d", i);
        }
+      cleanup:
+       free(sender);
+       free(path);
+       free(interface);
+       free(member);
+       free(eventname);
+    }
+}
+
 
+static void free_handle_signal(handle_signal_t * sig)
+{
+    if (sig->event_name != NULL) {
+       free(sig->event_name);
     }
-  cleanup:
-    free(sender);
-    free(path);
-    free(interface);
-    free(member);
-    free(eventname);
+    free(sig);
 }
 
 /* plugin initialization */