]> Pileus Git - grits/blobdiff - src/plugins/map.c
Fix race conditions
[grits] / src / plugins / map.c
index 4f15a946bf5584de49620d105798d11b3da5d222..bb585e1556d395def2d0eec495ba138e021d79b3 100644 (file)
@@ -57,6 +57,10 @@ static gboolean _load_tile_cb(gpointer _data)
 {
        struct _LoadTileData *data = _data;
        g_debug("GritsPluginMap: _load_tile_cb start");
+       if (data->map->aborted) {
+               g_debug("GritsPluginMap: _load_tile - aborted");
+               return FALSE;
+       }
 
        guint *tex = g_new0(guint, 1);
        glGenTextures(1, tex);
@@ -68,12 +72,13 @@ static gboolean _load_tile_cb(gpointer _data)
                        (data->alpha ? GL_RGBA : GL_RGB), GL_UNSIGNED_BYTE, data->pixels);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
        glFlush();
 
        data->tile->data = tex;
-       gtk_widget_queue_draw(GTK_WIDGET(data->map->viewer));
+       if (data->map->viewer)
+               gtk_widget_queue_draw(GTK_WIDGET(data->map->viewer));
        g_free(data->pixels);
        g_free(data);
        return FALSE;
@@ -189,7 +194,6 @@ GritsPluginMap *grits_plugin_map_new(GritsViewer *viewer)
        map->viewer = g_object_ref(viewer);
 
        /* Load initial tiles */
-       _load_tile(map->tiles, map);
        _update_tiles(NULL, map);
 
        /* Connect signals */