]> Pileus Git - aweather/commitdiff
Fix threading bug in Alert plugin
authorAndy Spencer <andy753421@gmail.com>
Sun, 18 Dec 2011 06:25:35 +0000 (06:25 +0000)
committerAndy Spencer <andy753421@gmail.com>
Sun, 1 Jan 2012 21:06:15 +0000 (21:06 +0000)
src/plugins/alert.c

index d4c6e212286995556f73ccd9976446508872ee24..1f19a45feb9bcc370afc40b1d21b3f2c0e52e477 100644 (file)
@@ -718,6 +718,13 @@ static gint _sort_warnings(gconstpointer _a, gconstpointer _b)
               (a->info->prior == b->info->prior) ?  0 : 1;
 }
 
+static gboolean _update_end(gpointer _alert)
+{
+       GritsPluginAlert *alert = _alert;
+       gtk_widget_queue_draw(GTK_WIDGET(alert->viewer));
+       return FALSE;
+}
+
 static void _update_warnings(GritsPluginAlert *alert, GList *old)
 {
        g_debug("GritsPluginAlert: _update_warnings");
@@ -737,11 +744,17 @@ static void _update_warnings(GritsPluginAlert *alert, GList *old)
        }
 
        /* Add new messages */
+       /* Load counties first since it does not require network access */
        for (GList *cur = alert->msgs; cur; cur = cur->next) {
                AlertMsg *msg = cur->data;
                msg->county_based = _load_county_based(alert, msg);
+       }
+       g_idle_add(_update_end, alert);
+       for (GList *cur = alert->msgs; cur; cur = cur->next) {
+               AlertMsg *msg = cur->data;
                msg->storm_based  = _load_storm_based(alert, msg);
        }
+       g_idle_add(_update_end, alert);
 
        g_debug("GritsPluginAlert: _load_warnings - end");
 }
@@ -764,7 +777,6 @@ static void _update(gpointer _, gpointer _alert)
        g_list_foreach(old, (GFunc)msg_free, NULL);
        g_list_free(old);
 
-       gtk_widget_queue_draw(GTK_WIDGET(alert->viewer));
        g_debug("GritsPluginAlert: _update - end");
 }
 
@@ -897,7 +909,7 @@ static void grits_plugin_alert_init(GritsPluginAlert *alert)
 {
        g_debug("GritsPluginAlert: init");
        /* Set defaults */
-       alert->threads = g_thread_pool_new(_update, alert, 1, TRUE, NULL);
+       alert->threads = g_thread_pool_new(_update, alert, 1, FALSE, NULL);
        alert->config  = _make_config();
        alert->http    = grits_http_new(G_DIR_SEPARATOR_S
                        "alerts" G_DIR_SEPARATOR_S