[PATCH] tests: fix GError pointer initialization and memory leaks

Ben Chan benchan at chromium.org
Mon Jun 2 19:10:47 PDT 2014


This patch fixes a few memory leaks and clears a few GError pointers
before reusing them.
---
 plugins/tests/test-fixture.c      | 20 +++++++++++++++-----
 plugins/tests/test-port-context.c | 29 +++++++++++++++++++++--------
 2 files changed, 36 insertions(+), 13 deletions(-)

diff --git a/plugins/tests/test-fixture.c b/plugins/tests/test-fixture.c
index 6b10f47..2fe1d59 100644
--- a/plugins/tests/test-fixture.c
+++ b/plugins/tests/test-fixture.c
@@ -34,8 +34,10 @@ test_fixture_setup (TestFixture *fixture)
 
     /* Create DBus connection */
     fixture->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
-    if (fixture->connection == NULL)
+    if (fixture->connection == NULL) {
         g_error ("Error getting connection to test bus: %s", error->message);
+        g_clear_error (&error);
+    }
 
     /* Ping to autostart MM; wait up to 3s */
     result = g_dbus_connection_call_sync (fixture->connection,
@@ -49,8 +51,10 @@ test_fixture_setup (TestFixture *fixture)
                                           3000, /* timeout, ms */
                                           NULL, /* cancellable */
                                           &error);
-    if (!result)
+    if (!result) {
         g_error ("Error starting ModemManager in test bus: %s", error->message);
+        g_clear_error (&error);
+    }
     g_variant_unref (result);
 
     /* Create the proxy that we're going to test */
@@ -60,8 +64,10 @@ test_fixture_setup (TestFixture *fixture)
                                                   "/org/freedesktop/ModemManager1",
                                                   NULL, /* cancellable */
                                                   &error);
-    if (fixture->test == NULL)
+    if (fixture->test == NULL) {
         g_error ("Error getting ModemManager test proxy: %s", error->message);
+        g_clear_error (&error);
+    }
 }
 
 void
@@ -111,8 +117,10 @@ test_fixture_get_modem (TestFixture *fixture)
                                    G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
                                    NULL, /* cancellable */
                                    &error);
-    if (!manager)
+    if (!manager) {
         g_error ("Couldn't create manager: %s", error->message);
+        g_clear_error (&error);
+    }
 
     /* Find new modem object */
     while (!found) {
@@ -157,8 +165,10 @@ test_fixture_no_modem (TestFixture *fixture)
                                    G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
                                    NULL, /* cancellable */
                                    &error);
-    if (!manager)
+    if (!manager) {
         g_error ("Couldn't create manager: %s", error->message);
+        g_clear_error (&error);
+    }
 
     /* Find new modem object */
     while (!no_modems) {
diff --git a/plugins/tests/test-port-context.c b/plugins/tests/test-port-context.c
index cbf202f..53c6ef3 100644
--- a/plugins/tests/test-port-context.c
+++ b/plugins/tests/test-port-context.c
@@ -53,10 +53,16 @@ test_port_context_load_commands (TestPortContext *self,
     gchar *contents;
     gchar *current;
 
-    if (!g_file_get_contents (file, &contents, NULL, &error))
+    if (!g_file_get_contents (file, &contents, NULL, &error)) {
+        gchar *filename;
+
+        filename = g_filename_display_name (file);
         g_error ("Couldn't load commands file '%s': %s",
-                 g_filename_display_name (file),
+                 filename,
                  error->message);
+        g_free (filename);
+        g_clear_error (&error);
+    }
 
     current = contents;
     while (current) {
@@ -198,8 +204,7 @@ connection_readable_cb (GSocket *socket,
 
     if (r < 0) {
         g_warning ("Error reading from istream: %s", error ? error->message : "unknown");
-        if (error)
-            g_error_free (error);
+        g_clear_error (&error);
         /* Close the device */
         connection_close (client);
         return FALSE;
@@ -269,20 +274,26 @@ create_socket_service (TestPortContext *self)
                            G_SOCKET_TYPE_STREAM,
                            G_SOCKET_PROTOCOL_DEFAULT,
                            &error);
-    if (!socket)
+    if (!socket) {
         g_error ("Cannot create socket: %s", error->message);
+        g_clear_error (&error);
+    }
 
     /* Bind to address */
     address = (g_unix_socket_address_new_with_type (
                    self->name,
                    -1,
                    G_UNIX_SOCKET_ADDRESS_ABSTRACT));
-    if (!g_socket_bind (socket, address, TRUE, &error))
+    if (!g_socket_bind (socket, address, TRUE, &error)) {
         g_error ("Cannot bind socket: %s", error->message);
+        g_clear_error (&error);
+    }
 
     /* Listen */
-    if (!g_socket_listen (socket, &error))
+    if (!g_socket_listen (socket, &error)) {
         g_error ("Cannot listen in socket: %s", error->message);
+        g_clear_error (&error);
+    }
 
     /* Create socket service */
     service = g_socket_service_new ();
@@ -290,8 +301,10 @@ create_socket_service (TestPortContext *self)
     if (!g_socket_listener_add_socket (G_SOCKET_LISTENER (service),
                                        socket,
                                        NULL, /* don't pass an object, will take a reference */
-                                       &error))
+                                       &error)) {
         g_error ("Cannot add listener to socket: %s", error->message);
+        g_clear_error (&error);
+    }
 
     /* Start it */
     g_socket_service_start (service);
-- 
1.9.1.423.g4596e3a



More information about the ModemManager-devel mailing list