diff options
author | Mike Gorse <mgorse@suse.com> | 2012-08-20 14:29:22 -0500 |
---|---|---|
committer | Mike Gorse <mgorse@suse.com> | 2012-08-20 14:29:22 -0500 |
commit | 3cdd2ef552996044c51109415384ee043e2f2c57 (patch) | |
tree | da92cb1398871b21ab4ceb916ec409f4ef51eb09 | |
parent | aa12a16a7064dbf923cb2e92918d4497732d53f7 (diff) | |
download | at-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.c | 13 |
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 { |