[PATCH] tests: fix GError pointer initialization and memory leaks
Ben Chan
benchan at chromium.org
Tue Jun 3 07:50:39 PDT 2014
Gotcha. I guess the GError* and gchar* leaks are probably ok if the program
aborts.
On Tue, Jun 3, 2014 at 1:56 AM, Aleksander Morgado <aleksander at aleksander.es
> wrote:
> On 03/06/14 04:10, Ben Chan wrote:
> > This patch fixes a few memory leaks and clears a few GError pointers
> > before reusing them.
> > ---
>
>
> g_error() explicitly aborts the program; so there really is no point in
> clearing the error afterwards because the program will no longer be
> running:
>
> https://developer.gnome.org/glib/stable/glib-Message-Logging.html#g-error
>
>
> > 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);
> >
>
>
> --
> Aleksander
> https://aleksander.es
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/modemmanager-devel/attachments/20140603/5976a8c8/attachment-0001.html>
More information about the ModemManager-devel
mailing list