[libgis] Miscellaneous bug fixes
- From: Andy Spencer <andys src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgis] Miscellaneous bug fixes
- Date: Fri, 10 Sep 2010 03:16:53 +0000 (UTC)
commit ffb05ac5f9bdc820ecb279b73782a747651a192a
Author: Andy Spencer <andy753421 gmail com>
Date: Sat May 1 07:17:04 2010 +0000
Miscellaneous bug fixes
- Lots of plugged memory leaks
- Lots of small improvements
src/.vimrc | 3 ++-
src/Makefile.am | 5 ++++-
src/data/gis-http.c | 7 +++++--
src/gis-opengl.c | 11 ++++++-----
src/gis-plugin.c | 7 +++++++
src/gis-prefs.c | 5 +++--
src/gis-test.c | 33 ++++++++++++++++++++++++---------
src/gtk.suppression | 30 ++++++++++++++++++------------
src/plugins/map.c | 3 ++-
src/plugins/sat.c | 5 +++--
10 files changed, 74 insertions(+), 35 deletions(-)
---
diff --git a/src/.vimrc b/src/.vimrc
index b071c55..01772fa 100644
--- a/src/.vimrc
+++ b/src/.vimrc
@@ -1,4 +1,5 @@
set makeprg=make\ test
set tw=100
-au FileType valgrind syn match gisFile "\v<(gis-\w+|elev|env|map|sat|test)\.c>" containedin=valgrindSrc
+
+au FileType valgrind syn match gisFile "\v<(gis-\w+|roam|elev|env|map|sat|test|radar)\.c>" containedin=valgrindSrc
au FileType valgrind hi link gisFile Error
diff --git a/src/Makefile.am b/src/Makefile.am
index 17c04a6..1673dff 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -45,22 +45,25 @@ libgis_la_LIBADD = $(AM_LDADD) \
# Demo program
if NOTWIN32
-AM_LDFLAGS += -static
+BINLDFLAGS = -static
endif
bin_PROGRAMS = gis-demo
gis_demo_SOURCES = gis-demo.c
gis_demo_LDADD = $(AM_LDADD) libgis.la
+gis_demo_LDFLAGS = $(BINLDFLAGS)
# Test programs
noinst_PROGRAMS = gis-test tile-test
gis_test_SOURCES = gis-test.c
gis_test_LDADD = $(AM_LDADD) libgis.la
+gis_test_LDFLAGS = $(BINLDFLAGS)
tile_test_SOURCES = tile-test.c
tile_test_LDADD = $(AM_LDADD) libgis.la
+tile_test_LDFLAGS = $(BINLDFLAGS)
MAINTAINERCLEANFILES = Makefile.in
diff --git a/src/data/gis-http.c b/src/data/gis-http.c
index b5259e4..b610fa3 100644
--- a/src/data/gis-http.c
+++ b/src/data/gis-http.c
@@ -123,8 +123,7 @@ static void _chunk_cb(SoupMessage *message, SoupBuffer *chunk, gpointer _info)
gchar *gis_http_fetch(GisHttp *http, const gchar *uri, const char *local,
GisCacheType mode, GisChunkCallback callback, gpointer user_data)
{
- g_debug("GisHttp: fetch - %s... >> %s/%s mode=%d",
- uri, http->prefix, local, mode);
+ g_debug("GisHttp: fetch - %s mode=%d", local, mode);
gchar *path = _get_cache_path(http, local);
/* Unlink the file if we're refreshing it */
@@ -218,6 +217,7 @@ GList *gis_http_available(GisHttp *http,
if (g_regex_match(filter_re, file, 0, NULL))
files = g_list_prepend(files, g_strdup(file));
g_free(path);
+ g_dir_close(dir);
}
/* Add online files if online */
@@ -243,11 +243,14 @@ GList *gis_http_available(GisHttp *http,
g_match_info_next(info, NULL);
}
+ g_regex_unref(extract_re);
g_match_info_free(info);
g_unlink(path);
g_free(path);
g_free(html);
}
+ g_regex_unref(filter_re);
+
return files;
}
diff --git a/src/gis-opengl.c b/src/gis-opengl.c
index dc32fa8..fc0c55e 100644
--- a/src/gis-opengl.c
+++ b/src/gis-opengl.c
@@ -187,7 +187,6 @@ static void _draw_tile(GisOpenGL *opengl, GisTile *tile, GList *triangles)
glNormal3dv(tri->p.l->norm); glTexCoord2dv(xy[2]); glVertex3dv((double*)tri->p.l);
glEnd();
}
- g_list_free(triangles);
}
static void _draw_tiles(GisOpenGL *opengl, GisTile *tile)
@@ -218,7 +217,8 @@ static void _draw_tiles(GisOpenGL *opengl, GisTile *tile)
const gdouble s = tile->edge.n-(lat_step*(row+1));
const gdouble e = tile->edge.w+(lon_step*(col+1));
const gdouble w = tile->edge.w+(lon_step*(col+0));
- GList *these = roam_sphere_get_intersect(opengl->sphere, FALSE, n, s, e, w);
+ GList *these = roam_sphere_get_intersect(opengl->sphere,
+ FALSE, n, s, e, w);
triangles = g_list_concat(triangles, these);
}
}
@@ -228,6 +228,7 @@ static void _draw_tiles(GisOpenGL *opengl, GisTile *tile)
}
if (triangles)
_draw_tile(opengl, tile, triangles);
+ g_list_free(triangles);
}
static void _draw_marker(GisOpenGL *opengl, GisMarker *marker)
@@ -321,7 +322,7 @@ static void _draw_object(GisOpenGL *opengl, GisObject *object)
static void _load_object(GisOpenGL *opengl, GisObject *object)
{
- g_debug("GisOpenGL: load_object");
+ //g_debug("GisOpenGL: load_object");
if (GIS_IS_MARKER(object)) {
GisMarker *marker = GIS_MARKER(object);
cairo_surface_t *surface = cairo_get_target(marker->cairo);
@@ -338,13 +339,13 @@ static void _load_object(GisOpenGL *opengl, GisObject *object)
cairo_image_surface_get_data(surface));
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- g_debug("load_texture: %d", marker->tex);
+ //g_debug("load_texture: %d", marker->tex);
}
}
static void _unload_object(GisOpenGL *opengl, GisObject *object)
{
- g_debug("GisOpenGL: unload_object");
+ //g_debug("GisOpenGL: unload_object");
if (GIS_IS_MARKER(object)) {
GisMarker *marker = GIS_MARKER(object);
glDeleteTextures(1, &marker->tex);
diff --git a/src/gis-plugin.c b/src/gis-plugin.c
index 2a592d6..537400e 100644
--- a/src/gis-plugin.c
+++ b/src/gis-plugin.c
@@ -201,6 +201,13 @@ GList *gis_plugins_available(GisPlugins *plugins)
}
g_dir_close(dir);
}
+ list = g_list_sort(list, (GCompareFunc)g_strcmp0);
+ for (GList *cur = list; cur; cur = cur->next)
+ while (cur->next && g_str_equal(cur->data,cur->next->data)) {
+ GList *tmp = cur->next;
+ list = g_list_remove_link(list, cur);
+ cur = tmp;
+ }
return list;
}
diff --git a/src/gis-prefs.c b/src/gis-prefs.c
index 2eb5b4d..fb111e6 100644
--- a/src/gis-prefs.c
+++ b/src/gis-prefs.c
@@ -95,8 +95,9 @@ c_type gis_prefs_get_##name##_v(GisPrefs *prefs,
{ \
GError *error = NULL; \
c_type value = g_key_file_get_##name(prefs->key_file, group, key, &error); \
- if (error && error->code != G_KEY_FILE_ERROR_GROUP_NOT_FOUND) \
- g_warning("GisPrefs: get_value_##name - error getting key %s: %s\n", \
+ if (error && error->code != G_KEY_FILE_ERROR_GROUP_NOT_FOUND && \
+ error->code != G_KEY_FILE_ERROR_KEY_NOT_FOUND) \
+ g_warning("GisPrefs: get_"#name" - error getting key %s: %s\n", \
key, error->message); \
if (error && _error) \
*_error = error; \
diff --git a/src/gis-test.c b/src/gis-test.c
index 53df1ea..6366ade 100644
--- a/src/gis-test.c
+++ b/src/gis-test.c
@@ -52,6 +52,13 @@ static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event,
return gis_shutdown(widget);
return FALSE;
}
+static void load_plugin(GisPlugins *plugins, gchar *name,
+ GisViewer *viewer, GisPrefs *prefs, GtkNotebook *notebook)
+{
+ GisPlugin *plugin = gis_plugins_load(plugins, name, viewer, prefs);
+ GtkWidget *config = gis_plugin_get_config(plugin);
+ gtk_notebook_append_page(notebook, config, gtk_label_new(name));
+}
/***********
* Methods *
@@ -69,21 +76,29 @@ int main(int argc, char **argv)
gdk_threads_enter();
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+ GtkWidget *config = gtk_notebook_new();
g_signal_connect(window, "delete-event", G_CALLBACK(on_delete), NULL);
g_signal_connect(window, "key-press-event", G_CALLBACK(on_key_press), NULL);
- gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(viewer));
+ gtk_notebook_set_tab_pos(GTK_NOTEBOOK(config), GTK_POS_BOTTOM);
+ gtk_container_add(GTK_CONTAINER(window), vbox);
+ gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(viewer), TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(config), FALSE, FALSE, 0);
gtk_widget_show_all(window);
+ /* Configurable stuff */
+ gis_viewer_set_offline(viewer, TRUE);
+ //load_plugin(plugins, "elev", viewer, prefs, GTK_NOTEBOOK(config));
+ //load_plugin(plugins, "env", viewer, prefs, GTK_NOTEBOOK(config));
+ //load_plugin(plugins, "map", viewer, prefs, GTK_NOTEBOOK(config));
+ load_plugin(plugins, "sat", viewer, prefs, GTK_NOTEBOOK(config));
+ //load_plugin(plugins, "test", viewer, prefs, GTK_NOTEBOOK(config));
+ load_plugin(plugins, "radar", viewer, prefs, GTK_NOTEBOOK(config));
- /* elev env map sat test */
- gis_plugins_load(plugins, "elev", viewer, prefs);
- gis_plugins_load(plugins, "env", viewer, prefs);
- gis_plugins_load(plugins, "map", viewer, prefs);
- gis_plugins_load(plugins, "sat", viewer, prefs);
- gis_plugins_load(plugins, "test", viewer, prefs);
-
+ gtk_widget_show_all(config);
gtk_main();
-
gdk_threads_leave();
+
+ gdk_display_close(gdk_display_get_default());
return 0;
}
diff --git a/src/gtk.suppression b/src/gtk.suppression
index 1b53be4..b7d9a31 100644
--- a/src/gtk.suppression
+++ b/src/gtk.suppression
@@ -43,18 +43,24 @@
...
fun:gtk_icon_theme_has_icon
}
-#{
-# gtk_icon_theme_get
-# Memcheck:Leak
-# ...
-# fun:gtk_icon_theme_get*
-#}
-#{
-# gtk_icon_factory_lookup
-# Memcheck:Leak
-# ...
-# fun:gtk_icon_factory_lookup*
-#}
+{
+ gtk_icon_source_copy
+ Memcheck:Leak
+ ...
+ fun:gtk_icon_source_copy
+}
+{
+ gtk_icon_theme_get
+ Memcheck:Leak
+ ...
+ fun:gtk_icon_theme_get*
+}
+{
+ gtk_icon_factory_lookup
+ Memcheck:Leak
+ ...
+ fun:gtk_icon_factory_lookup*
+}
{
gxk__for_display
Memcheck:Leak
diff --git a/src/plugins/map.c b/src/plugins/map.c
index a0f28dc..4be4607 100644
--- a/src/plugins/map.c
+++ b/src/plugins/map.c
@@ -127,7 +127,8 @@ static void _free_tile(GisTile *tile, gpointer _map)
{
GisPluginMap *map = _map;
g_debug("GisPluginMap: _free_tile: %p", tile->data);
- g_idle_add_full(G_PRIORITY_LOW, _free_tile_cb, tile->data, NULL);
+ if (tile->data)
+ g_idle_add_full(G_PRIORITY_LOW, _free_tile_cb, tile->data, NULL);
}
static gpointer _update_tiles(gpointer _map)
diff --git a/src/plugins/sat.c b/src/plugins/sat.c
index 9e1af30..5dc3c85 100644
--- a/src/plugins/sat.c
+++ b/src/plugins/sat.c
@@ -117,8 +117,9 @@ static gboolean _free_tile_cb(gpointer data)
static void _free_tile(GisTile *tile, gpointer _sat)
{
GisPluginSat *sat = _sat;
- g_debug("GisPluginSat: _free_tile: %p=%d", tile->data, *(guint*)tile->data);
- g_idle_add_full(G_PRIORITY_LOW, _free_tile_cb, tile->data, NULL);
+ g_debug("GisPluginSat: _free_tile: %p", tile->data);
+ if (tile->data)
+ g_idle_add_full(G_PRIORITY_LOW, _free_tile_cb, tile->data, NULL);
}
static gpointer _update_tiles(gpointer _sat)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]