]> Pileus Git - grits/commitdiff
Improve shutdown code
authorAndy Spencer <andy753421@gmail.com>
Tue, 24 May 2011 05:51:20 +0000 (05:51 +0000)
committerAndy Spencer <andy753421@gmail.com>
Tue, 24 May 2011 05:51:20 +0000 (05:51 +0000)
src/grits-plugin.c
src/grits-test.c
src/grits-viewer.c
src/plugins/elev.c
src/plugins/map.c
src/plugins/sat.c
src/plugins/test.c

index 494b7165dadfa261fee0f086553cedbdb4204b20..91514fcbb3882795747fe4c43d603fddda92a7e4 100644 (file)
@@ -155,11 +155,7 @@ GritsPlugins *grits_plugins_new(const gchar *dir, GritsPrefs *prefs)
 static void grits_plugins_free_store(GritsPluginStore *store)
 {
        g_object_unref(store->plugin);
-       /* Flush any possible callbacks before
-        * unloading the plugin code */
-       while (gtk_events_pending())
-                 gtk_main_iteration();
-       g_module_close(store->module);
+       //g_module_close(store->module);
        g_free(store->name);
        g_free(store);
 }
@@ -349,8 +345,8 @@ gboolean grits_plugins_unload(GritsPlugins *plugins, const char *name)
        for (GList *cur = plugins->plugins; cur; cur = cur->next) {
                GritsPluginStore *store = cur->data;
                if (g_str_equal(store->name, name)) {
-                       grits_plugins_free_store(store);
                        plugins->plugins = g_list_delete_link(plugins->plugins, cur);
+                       grits_plugins_free_store(store);
                }
        }
        return FALSE;
index 8f46185931a511bc3c62a670434ce0d9449699ca..67e299d887d4376f50d0aa85d5203317559ebfcf 100644 (file)
@@ -31,13 +31,13 @@ GritsViewer  *viewer  = NULL;
  *************/
 static gboolean grits_shutdown(GtkWidget *window)
 {
+       static gboolean shutdown = FALSE;
+       if (shutdown) return TRUE;
+       shutdown = TRUE;
+
        grits_plugins_free(plugins);
        g_object_unref(prefs);
        gtk_widget_destroy(window);
-
-       while (gtk_events_pending())
-                 gtk_main_iteration();
-
        gtk_main_quit();
        return TRUE;
 }
index bb86d6473e5f7c29c21beab9503d9e9cf62350bb..bfc704b35baeeeacf63c604aaa585404c8e326e2 100644 (file)
@@ -592,6 +592,7 @@ static void grits_viewer_finalize(GObject *gobject)
 {
        g_debug("GritsViewer: finalize");
        G_OBJECT_CLASS(grits_viewer_parent_class)->finalize(gobject);
+       g_debug("GritsViewer: finalize - done");
 }
 static void grits_viewer_class_init(GritsViewerClass *klass)
 {
index 251ec74471ea0808c4f0cf2dc9d893d470fd3425..e99b32633971981a5a406011455990c073110e78 100644 (file)
@@ -336,9 +336,11 @@ static void grits_plugin_elev_dispose(GObject *gobject)
        g_debug("GritsPluginElev: dispose");
        GritsPluginElev *elev = GRITS_PLUGIN_ELEV(gobject);
        /* Drop references */
-       if (LOAD_BIL)
-               grits_viewer_clear_height_func(elev->viewer);
        if (elev->viewer) {
+               if (LOAD_BIL)
+                       grits_viewer_clear_height_func(elev->viewer);
+               if (LOAD_OPENGL)
+                       grits_viewer_remove(elev->viewer, elev->tiles);
                g_signal_handler_disconnect(elev->viewer, elev->sigid);
                g_object_unref(elev->viewer);
                elev->viewer = NULL;
@@ -352,6 +354,8 @@ static void grits_plugin_elev_finalize(GObject *gobject)
        /* Free data */
        grits_tile_free(elev->tiles, _free_tile, elev);
        grits_wms_free(elev->wms);
+       g_mutex_lock(elev->mutex);
+       g_mutex_unlock(elev->mutex);
        g_mutex_free(elev->mutex);
        G_OBJECT_CLASS(grits_plugin_elev_parent_class)->finalize(gobject);
 
index 6c7379691bcda2cd07db0ac845b561d8998fe485..b1363e44a438f1e5a5d8ff608359432335ba3285 100644 (file)
@@ -220,6 +220,7 @@ static void grits_plugin_map_init(GritsPluginMap *map)
        map->wms   = grits_wms_new(
                "http://labs.metacarta.com/wms/vmap0", "basic", "image/png",
                "osm/", "png", TILE_WIDTH, TILE_HEIGHT);
+       g_object_ref(map->tiles);
 }
 static void grits_plugin_map_dispose(GObject *gobject)
 {
@@ -228,6 +229,10 @@ static void grits_plugin_map_dispose(GObject *gobject)
        /* Drop references */
        if (map->viewer) {
                g_signal_handler_disconnect(map->viewer, map->sigid);
+               grits_viewer_remove(map->viewer, map->tiles);
+               soup_session_abort(map->wms->http->soup);
+               while (gtk_events_pending())
+                       gtk_main_iteration();
                g_object_unref(map->viewer);
                map->viewer = NULL;
        }
index 29a7d263a56f863e4b9c9e09ba8193ddc80530ed..ebcc838d0faa63607283488eee0be55aca6aa27e 100644 (file)
@@ -210,6 +210,7 @@ static void grits_plugin_sat_init(GritsPluginSat *sat)
        sat->wms   = grits_wms_new(
                "http://www.nasa.network.com/wms", "bmng200406", "image/jpeg",
                "bmng/", "jpg", TILE_WIDTH, TILE_HEIGHT);
+       g_object_ref(sat->tiles);
 }
 static void grits_plugin_sat_dispose(GObject *gobject)
 {
@@ -218,6 +219,10 @@ static void grits_plugin_sat_dispose(GObject *gobject)
        /* Drop references */
        if (sat->viewer) {
                g_signal_handler_disconnect(sat->viewer, sat->sigid);
+               grits_viewer_remove(sat->viewer, sat->tiles);
+               soup_session_abort(sat->wms->http->soup);
+               while (gtk_events_pending())
+                       gtk_main_iteration();
                g_object_unref(sat->viewer);
                sat->viewer = NULL;
        }
index 609297c58904d3682c0513901f3d0e32c1e8a83b..d917092e000b0112f37dbd104708039a38d7d6f1 100644 (file)
@@ -56,7 +56,7 @@ GritsPluginTest *grits_plugin_test_new(GritsViewer *viewer)
        g_debug("GritsPluginTest: new");
        GritsPluginTest *test = g_object_new(GRITS_TYPE_PLUGIN_TEST, NULL);
        test->viewer = g_object_ref(viewer);
-       g_idle_add(_load_marker, test);
+       _load_marker(test);
        return test;
 }
 
@@ -88,7 +88,7 @@ static void grits_plugin_test_dispose(GObject *_test)
                g_object_unref(test->viewer);
                test->viewer = NULL;
        }
-       G_OBJECT_CLASS(grits_plugin_test_parent_class)->finalize(_test);
+       G_OBJECT_CLASS(grits_plugin_test_parent_class)->dispose(_test);
 }
 static void grits_plugin_test_class_init(GritsPluginTestClass *klass)
 {