[sawfish: 1/3] Wrap most of add_window in rep_PUSHGC/rep_POPGC.
- From: Christopher Bratusek <chrisb src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [sawfish: 1/3] Wrap most of add_window in rep_PUSHGC/rep_POPGC.
- Date: Wed, 7 Oct 2009 13:00:45 +0000 (UTC)
commit c3235edd1f570d543c1b60f2f70ce27cca08fd26
Author: Timo Korvola <tkorvola iki fi>
Date: Tue Oct 6 00:28:33 2009 +0300
Wrap most of add_window in rep_PUSHGC/rep_POPGC.
There have been crashes that might be due to a window being
destroyed, garbage collected and then accessed, all during
add_window (client destroys window really quickly after mapping).
src/windows.c | 11 ++++++-----
1 files changed, 6 insertions(+), 5 deletions(-)
---
diff --git a/src/windows.c b/src/windows.c
index baf924a..ca98b13 100644
--- a/src/windows.c
+++ b/src/windows.c
@@ -459,6 +459,10 @@ add_window (Window id)
w->net_name = Qnil;
w->net_icon_name = Qnil;
+ /* Don't garbage collect the window before we are done. */
+ /* Note: must not return without rep_POPGC. */
+ rep_PUSHGC(gc_win, win);
+
/* have to put it somewhere until it finds the right place */
insert_in_stacking_list_above_all (w);
restack_window (w);
@@ -527,10 +531,8 @@ add_window (Window id)
}
/* ..then call the add-window-hook's.. */
- rep_PUSHGC(gc_win, win);
Fcall_window_hook (Qbefore_add_window_hook, rep_VAL(w), Qnil, Qnil);
Fcall_window_hook (Qadd_window_hook, rep_VAL(w), Qnil, Qnil);
- rep_POPGC;
/* In case the window disappeared during the hook call */
if (!WINDOW_IS_GONE_P (w))
@@ -551,13 +553,11 @@ add_window (Window id)
if (!WINDOW_IS_GONE_P (w))
{
- repv tem = Fwindow_get (rep_VAL(w), Qplaced, Qnil);
+ repv tem = Fwindow_get (rep_VAL(w), Qplaced, Qnil);
if (initialising || (tem && tem == Qnil))
{
/* ..then the place-window-hook.. */
- rep_PUSHGC(gc_win, win);
Fcall_window_hook (Qplace_window_hook, rep_VAL(w), Qnil, Qor);
- rep_POPGC;
}
}
Fwindow_put (rep_VAL(w), Qplaced, Qt);
@@ -570,6 +570,7 @@ add_window (Window id)
/* Tell the window where it ended up.. */
send_synthetic_configure (w);
}
+ rep_POPGC;
}
return w;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]