]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
Plug various memory leaks
authorCharlie Brej <cbrej@cs.man.ac.uk>
Sat, 20 Sep 2008 21:46:47 +0000 (17:46 -0400)
committerRay Strode <rstrode@redhat.com>
Sat, 20 Sep 2008 21:56:43 +0000 (17:56 -0400)
src/libply/ply-event-loop.c
src/libply/ply-image.c
src/libply/ply-logger.c
src/libply/ply-logger.h
src/libply/ply-utils.c
src/libplybootsplash/ply-entry.c
src/libplybootsplash/ply-window.c
src/main.c
src/ply-boot-server.c

index 0f313851dbbb06bd52e80de89f3c931b85d693d4..31d6016f65b5cf5d07d4f11a0a9be3f93e8378f2 100644 (file)
@@ -1149,13 +1149,12 @@ static void
 ply_event_loop_process_pending_events (ply_event_loop_t *loop)
 {
   int number_of_received_events, i;
-  static struct epoll_event *events = NULL;
+  struct epoll_event *events = NULL;
 
   assert (loop != NULL);
 
-  if (events == NULL)
-    events =
-        malloc (PLY_EVENT_LOOP_NUM_EVENT_HANDLERS * sizeof (struct epoll_event));
+  events =
+        alloca (PLY_EVENT_LOOP_NUM_EVENT_HANDLERS * sizeof (struct epoll_event));
 
   memset (events, -1,
           PLY_EVENT_LOOP_NUM_EVENT_HANDLERS * sizeof (struct epoll_event));
index 249b6b6fc81a30cf8ed91c51d40bb3149edc1e85..d6b92dbb091334af9896ca63c6a1257056dc2761 100644 (file)
@@ -226,6 +226,7 @@ ply_image_load (ply_image_t *image)
   free (rows);
   png_read_end (png, info);
   ply_image_close_file (image);
+  png_destroy_read_struct (&png, &info, NULL);
 
   image->width = width;
   image->height = height;
index f9e4c36cf9529821a657d69c7e4bd8fe079fcc53..23093e316bb054285e4934de22bb2b712b201681 100644 (file)
@@ -280,6 +280,7 @@ ply_logger_free (ply_logger_t *logger)
     }
 
   free (logger->filename);
+  free (logger->buffer);
   free (logger);
 }
 
index 668616c78899d666ea072854bbfb99229138745f..7f4d02a7bf1ab848fa971f9b736136c5fb56c657 100644 (file)
@@ -102,6 +102,8 @@ while (0)
         ply_logger_close_file (ply_logger_get_default ())
 #define ply_flush_log()                                                        \
         ply_logger_flush (ply_logger_get_default ())
+#define ply_free_log()                                                         \
+        ply_logger_free (ply_logger_get_default ())
 #define ply_log(format, args...)                                               \
         ply_logger_inject (ply_logger_get_default (), format "\n", ##args)
 #define ply_log_without_new_line(format, args...)                              \
@@ -110,6 +112,8 @@ while (0)
         ply_logger_inject (ply_logger_get_error_default (), format "\n", ##args)
 #define ply_error_without_new_line(format, args...)                            \
         ply_logger_inject (ply_logger_get_error_default (), format, ##args)
+#define ply_free_error_log()                                                   \
+        ply_logger_free (ply_logger_get_error_default ())
 
 #define ply_toggle_tracing()                                                   \
         ply_logger_toggle_tracing (ply_logger_get_error_default ())
index a8e428487284984b2b87775a5da3b82e23bb5230..e55d8901af79c3572284d939c67e91c7985d4076 100644 (file)
@@ -771,7 +771,6 @@ ply_create_daemon (void)
   if (!ply_open_unidirectional_pipe (&sender_fd, &receiver_fd))
     return NULL;
 
-  handle = calloc (1, sizeof (int));
 
   pid = fork ();
 
@@ -793,6 +792,7 @@ ply_create_daemon (void)
     }
   close (receiver_fd);
 
+  handle = calloc (1, sizeof (int));
   *handle = sender_fd;
 
   return (ply_daemon_handle_t *) handle;
index cf28d37ced4a68769cc25b00d2a49140b5b1967d..0a42416110e3da16aa230d301a73fe9e7454407e 100644 (file)
@@ -101,7 +101,8 @@ ply_entry_free (ply_entry_t *entry)
 {
   if (entry == NULL)
     return;
-
+  ply_image_free (entry->text_field_image);
+  ply_image_free (entry->bullet_image);
   free (entry);
 }
 
index 22832a54d4c361a7634df2c2688d3f3142a2cc34..eaed960f724438246d87c44235df2db1a30cea0a 100644 (file)
@@ -731,6 +731,7 @@ ply_window_free (ply_window_t *window)
 {
   if (window == NULL)
     return;
+  free(window->tty_name);
 
   if (window->loop != NULL)
     ply_event_loop_stop_watching_for_exit (window->loop,
index 0fec219f0c05989b6a62e1e296cdfc92f5b9ac63..370a63e7eef5f5d2e6a6c4b77ab678e5dba8b6f9 100644 (file)
@@ -87,6 +87,7 @@ on_session_finished (state_t *state)
 {
   ply_log ("\nSession finished...exiting logger\n");
   ply_flush_log ();
+  ply_free_log ();
   ply_event_loop_exit (state->loop, 1);
 }
 
@@ -691,6 +692,8 @@ main (int    argc,
 
   ply_trace ("exiting with code %d", exit_code);
 
+  ply_free_error_log();
+
   return exit_code;
 }
 /* vim: set sts=4 ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
index 27ddadcb4e9b0440b786e727d9bf82970373e7ec..8a8414858c2904df2e2d9091baac07d47445d94a 100644 (file)
@@ -94,12 +94,19 @@ ply_boot_server_new (ply_boot_server_update_handler_t  update_handler,
   return server;
 }
 
+static void ply_boot_connection_on_hangup (ply_boot_connection_t *connection);
+
 void
 ply_boot_server_free (ply_boot_server_t *server)
 {
+  ply_list_node_t *node;
   if (server == NULL)
     return;
-
+  while (node = ply_list_get_first_node(server->connections))
+    {
+      ply_boot_connection_t *connection = ply_list_node_get_data (node);
+      ply_boot_connection_on_hangup (connection);
+    }
   ply_list_free (server->connections);
   ply_list_free (server->cached_answers);
   free (server);
@@ -171,12 +178,18 @@ ply_boot_connection_read_request (ply_boot_connection_t  *connection,
       uint8_t argument_size;
 
       if (!ply_read (connection->fd, &argument_size, sizeof (uint8_t)))
-        return false;
+        {
+          free(command);
+          return false;
+        }
 
       *argument = calloc (argument_size, sizeof (char));
 
       if (!ply_read (connection->fd, *argument, argument_size))
-        return false;
+        {
+          free(command);
+          return false;
+        }
     }
   return true;
 }
@@ -257,6 +270,7 @@ ply_boot_connection_on_request (ply_boot_connection_t *connection)
                       strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK)))
         ply_error ("could not write bytes: %m");
 
+      free(command);
       return;
     }
 
@@ -307,6 +321,7 @@ ply_boot_connection_on_request (ply_boot_connection_t *connection)
                                           server);
       /* will reply later
        */
+      free(command);
       return;
     }
   else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_CACHED_PASSWORD) == 0)
@@ -373,6 +388,7 @@ ply_boot_connection_on_request (ply_boot_connection_t *connection)
         }
 
       ply_buffer_free (buffer);
+      free(command);
       return;
     }
   else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_NEWROOT) == 0)
@@ -389,6 +405,7 @@ ply_boot_connection_on_request (ply_boot_connection_t *connection)
                       strlen (PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK)))
         ply_error ("could not write bytes: %m");
 
+      free(command);
       return;
     }
 
@@ -398,6 +415,7 @@ ply_boot_connection_on_request (ply_boot_connection_t *connection)
     {
       ply_error ("could not write bytes: %m");
     }
+  free(command);
 }
 
 static void