memleak fixes
authortsauerbeck <tsauerbeck>
Wed, 4 Feb 2004 17:43:41 +0000 (17:43 +0000)
committertsauerbeck <tsauerbeck@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 4 Feb 2004 17:43:41 +0000 (17:43 +0000)
SVN revision: 8797

legacy/ecore/src/lib/ecore_x/ecore_x.c
legacy/ecore/src/lib/ecore_x/ecore_x_private.h
legacy/ecore/src/lib/ecore_x/ecore_x_selection.c

index adc9f7fb7822fc43cf3a40b46e4a287ef9a52725..b9e7784ada1b189bb4474f4bf2383ccd19015e91 100644 (file)
@@ -422,6 +422,7 @@ ecore_x_shutdown(void)
    _ecore_x_filter_handler = NULL;
    _ecore_x_disp = NULL;
    _ecore_x_event_handlers = NULL;
+   _ecore_x_selection_shutdown();
    if (_ecore_x_init_count < 0) _ecore_x_init_count = 0;
    return _ecore_x_init_count;
 }
index 43d26a031cb7da8471b1aff71271bc04ce37c7b1..a8a73c32bd334af9d7450118a12fba0cb3c1b1de 100644 (file)
@@ -183,6 +183,7 @@ void _ecore_x_event_handle_mapping_notify(XEvent *xevent);
 void _ecore_x_event_handle_shape_change(XEvent *xevent);
 
 void _ecore_x_selection_data_initialize(void);
+void _ecore_x_selection_shutdown(void);
 Atom _ecore_x_selection_target_atom_get(char *target);
 char * _ecore_x_selection_target_get(Atom target);
 void _ecore_x_selection_request_data_set(Ecore_X_Selection_Data data);
index 1a1bd17bbde0b629a12f1871aa7206d9bc6aa32f..fdfe81e1f269d2c4e9ce4f7d3aa79ae95e7e1c53 100644 (file)
@@ -3,28 +3,40 @@
 #include <Ecore_X.h>
 #include <Ecore_Txt.h>
 
-/* FIXME: Initialize! */
-static Ecore_X_Selection_Data selections[3];
-static Ecore_X_Selection_Data request_data[3];
-static Ecore_X_Selection_Converter *converters;
+static Ecore_X_Selection_Data selections[3] = {{0}};
+static Ecore_X_Selection_Data request_data[3] = {{0}};
+static Ecore_X_Selection_Converter *converters = NULL;
 
 static int _ecore_x_selection_converter_text(char *target, void *data, int size, void **data_ret, int *size_ret);
 
 void
 _ecore_x_selection_data_initialize(void)
 {
-   memset(selections, 0, sizeof(selections));
-   memset(request_data, 0, sizeof(request_data));
-
    /* Initialize converters */
-   converters = NULL;
    ecore_x_selection_converter_atom_add(_ecore_x_atom_text, 
          _ecore_x_selection_converter_text);
    ecore_x_selection_converter_atom_add(_ecore_x_atom_compound_text,
          _ecore_x_selection_converter_text);
    ecore_x_selection_converter_atom_add(_ecore_x_atom_string,
          _ecore_x_selection_converter_text);
-   
+}
+
+void
+_ecore_x_selection_shutdown(void)
+{
+       Ecore_X_Selection_Converter *cnv = converters, *tmp;
+
+       if (!converters)
+               return;
+
+       /* free the selection converters */
+       while (cnv) {   
+               tmp = cnv->next;
+               free(cnv);
+               cnv = tmp;
+       }
+
+       converters = NULL;
 }
 
 static void