summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gorse <mgorse@suse.com>2012-08-20 14:29:22 -0500
committerMike Gorse <mgorse@suse.com>2012-08-20 14:29:22 -0500
commit3cdd2ef552996044c51109415384ee043e2f2c57 (patch)
treeda92cb1398871b21ab4ceb916ec409f4ef51eb09
parentaa12a16a7064dbf923cb2e92918d4497732d53f7 (diff)
downloadat-spi2-atk-3cdd2ef552996044c51109415384ee043e2f2c57.tar.gz
Don't iterate over the list twice when removing events
https://bugzilla.gnome.org/show_bug.cgi?id=679295
-rw-r--r--atk-adaptor/bridge.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c
index 08dfbd4..96fdbf9 100644
--- a/atk-adaptor/bridge.c
+++ b/atk-adaptor/bridge.c
@@ -575,11 +575,20 @@ remove_events (const char *bus_name, const char *event)
spi_event_is_subtype (evdata->data, remove_data))
{
GList *events = spi_global_app_data->events;
- list = list->next;
g_strfreev (evdata->data);
g_free (evdata->bus_name);
g_free (evdata);
- spi_global_app_data->events = g_list_remove (events, evdata);
+ if (list->prev)
+ {
+ GList *next = list->next;
+ list->prev = g_list_remove (list->prev, evdata);
+ list = next;
+ }
+ else
+ {
+ spi_global_app_data->events = g_list_remove (events, evdata);
+ list = spi_global_app_data->events;
+ }
}
else
{