From 592dc62de889be501e1d0fcb96f3e148181b111a Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Tue, 28 Aug 2007 15:26:23 +0000 Subject: [PATCH] fix X serial handling to cope with wraparounds and maintain referential Thu Aug 23 15:32:09 2007 Tim Janik * gdk/x11/gdkgeometry-x11.c (_gdk_window_process_expose): fix X serial handling to cope with wraparounds and maintain referential integrity when removing list nodes. based on a patch by Hui Wang, fixes #461648. svn path=/trunk/; revision=18693 --- ChangeLog | 7 +++++++ gdk/x11/gdkgeometry-x11.c | 10 ++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index f9bdfd45b..218715dfe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Thu Aug 23 15:32:09 2007 Tim Janik + + * gdk/x11/gdkgeometry-x11.c (_gdk_window_process_expose): fix + X serial handling to cope with wraparounds and maintain referential + integrity when removing list nodes. based on a patch by Hui Wang, + fixes #461648. + 2007-08-27 Stefan Kost * gtk/gtkwindow.c: Update menu accelerators, when adding/removing diff --git a/gdk/x11/gdkgeometry-x11.c b/gdk/x11/gdkgeometry-x11.c index 55b2040ee..2b476cfb1 100644 --- a/gdk/x11/gdkgeometry-x11.c +++ b/gdk/x11/gdkgeometry-x11.c @@ -1052,7 +1052,7 @@ gdk_window_queue (GdkWindow *window, GdkWindowQueueItem *item = tmp_list->data; GList *next = tmp_list->next; - if (serial > item->serial) + if (serial - item->serial < 0x7FFFFFFF) { queue_delete_link (display_x11->translate_queue, tmp_list); queue_item_free (item); @@ -1142,9 +1142,7 @@ _gdk_window_process_expose (GdkWindow *window, while (tmp_list) { GdkWindowQueueItem *item = tmp_list->data; - tmp_list = tmp_list->next; - - if (serial < item->serial) + if (item->serial - serial < 0x7FFFFFFF) { if (item->window == window) { @@ -1172,10 +1170,10 @@ _gdk_window_process_expose (GdkWindow *window, } else { - queue_delete_link (display_x11->translate_queue, - display_x11->translate_queue->head); + queue_delete_link (display_x11->translate_queue, tmp_list); queue_item_free (item); } + tmp_list = tmp_list->next; } }