From: Andy Spencer Date: Sun, 18 Dec 2011 06:25:35 +0000 (+0000) Subject: Fix threading bug in Alert plugin X-Git-Url: http://pileus.org/git/?p=aweather;a=commitdiff_plain;h=72675cb1ef354ec8377ebb7c6b48aa1e120f17b5 Fix threading bug in Alert plugin --- diff --git a/src/plugins/alert.c b/src/plugins/alert.c index 2ad3a4c..8ac35e0 100644 --- a/src/plugins/alert.c +++ b/src/plugins/alert.c @@ -717,6 +717,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"); @@ -736,11 +743,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"); } @@ -763,7 +776,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"); } @@ -896,7 +908,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