list->next->prev = link;
list->next = link;
object->ref = link;
+ g_object_ref(object);
g_mutex_unlock(&opengl->objects_lock);
}
{
g_assert(GRITS_IS_OPENGL(_opengl));
GritsOpenGL *opengl = GRITS_OPENGL(_opengl);
+ if (!object->ref)
+ return;
g_mutex_lock(&opengl->objects_lock);
GList *link = object->ref;
/* Just unlink and free it, link->prev is assured */
if (link->next)
link->next->prev = link->prev;
g_free(link);
+ object->ref = NULL;
+ g_object_unref(object);
g_mutex_unlock(&opengl->objects_lock);
}
g_debug("GritsPlugins: free");
for (GList *cur = plugins->plugins; cur; cur = cur->next) {
GritsPluginStore *store = cur->data;
- g_debug("GritsPlugin: freeing %s refs=%d->%d", store->name,
+ g_debug("GritsPlugins: freeing %s refs=%d->%d", store->name,
G_OBJECT(store->plugin)->ref_count,
G_OBJECT(store->plugin)->ref_count-1);
grits_plugins_free_store(store);
* @object: the object to remove
*
* Remove an object from the viewer.
- * The objects reference count is decremented.
*/
void grits_viewer_remove(GritsViewer *viewer, GritsObject *object)
{
g_warning("GritsViewer: remove - Unimplemented");
object->viewer = NULL;
klass->remove(viewer, object);
- g_object_unref(object);
}
/****************
static void grits_callback_finalize(GObject *cb)
{
g_debug("GritsCallback: finalize");
+ G_OBJECT_CLASS(grits_callback_parent_class)->finalize(cb);
}
static void grits_callback_init(GritsCallback *cb)
{
grits_viewer_clear_height_func(viewer);
if (LOAD_TEX)
grits_viewer_remove(viewer, GRITS_OBJECT(elev->tiles));
- else
- g_object_unref(elev->tiles);
+ g_object_unref(elev->tiles);
soup_session_abort(elev->wms->http->soup);
g_thread_pool_free(elev->threads, TRUE, TRUE);
while (gtk_events_pending())
if (env->viewer) {
for (GList *cur = env->refs; cur; cur = cur->next)
grits_viewer_remove(env->viewer, cur->data);
- g_list_free(env->refs);
+ g_list_free_full(env->refs, g_object_unref);
g_object_unref(env->viewer);
g_object_unref(env->prefs);
glDeleteTextures(1, &env->tex);
map->viewer = NULL;
g_signal_handler_disconnect(viewer, map->sigid);
grits_viewer_remove(viewer, GRITS_OBJECT(map->tiles));
+ g_object_unref(map->tiles);
soup_session_abort(map->tms->http->soup);
//soup_session_abort(map->wms->http->soup);
g_thread_pool_free(map->threads, TRUE, TRUE);
sat->viewer = NULL;
g_signal_handler_disconnect(viewer, sat->sigid);
grits_viewer_remove(viewer, GRITS_OBJECT(sat->tiles));
+ g_object_unref(sat->tiles);
soup_session_abort(sat->wms->http->soup);
g_thread_pool_free(sat->threads, TRUE, TRUE);
while (gtk_events_pending())
grits_viewer_remove(viewer, GRITS_OBJECT(test->marker));
grits_viewer_remove(viewer, GRITS_OBJECT(test->poly));
grits_viewer_remove(viewer, GRITS_OBJECT(test->line));
+ g_object_unref(test->marker);
+ g_object_unref(test->poly);
+ g_object_unref(test->line);
g_object_unref(viewer);
}
G_OBJECT_CLASS(grits_plugin_test_parent_class)->dispose(_test);