summaryrefslogtreecommitdiffstats
path: root/macosx/tkMacOSXWm.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2012-10-24 19:21:41 (GMT)
committerdgp <dgp@users.sourceforge.net>2012-10-24 19:21:41 (GMT)
commit424ae77983a41b07074316bd54860a29d773b8cd (patch)
tree76a50d14d8f6d2c5a41b0fbd27b7ea2a17c2b640 /macosx/tkMacOSXWm.c
parent044297cba1305580c09b0823a7d9da735435cc1e (diff)
parentf84f7e53e3c8ba30b1a3861253c44e99a753d77c (diff)
downloadtk-424ae77983a41b07074316bd54860a29d773b8cd.zip
tk-424ae77983a41b07074316bd54860a29d773b8cd.tar.gz
tk-424ae77983a41b07074316bd54860a29d773b8cd.tar.bz2
3574893 Add overlooked toplevel ref count maintenance in the [wm manage|forget]
operations that could cause segfaults due to premature free of structs.
Diffstat (limited to 'macosx/tkMacOSXWm.c')
-rw-r--r--macosx/tkMacOSXWm.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/macosx/tkMacOSXWm.c b/macosx/tkMacOSXWm.c
index 1bf6d2c..68cbb00 100644
--- a/macosx/tkMacOSXWm.c
+++ b/macosx/tkMacOSXWm.c
@@ -1659,7 +1659,9 @@ WmForgetCmd(
TkFocusJoin(winPtr);
Tk_UnmapWindow(frameWin);
+ macWin->toplevel->referenceCount--;
macWin->toplevel = winPtr->parentPtr->privatePtr->toplevel;
+ macWin->toplevel->referenceCount++;
macWin->flags &= ~TK_HOST_EXISTS;
TkWmDeadWindow(winPtr);
@@ -2448,7 +2450,9 @@ WmManageCmd(
}
wmPtr = winPtr->wmInfoPtr;
winPtr->flags &= ~TK_MAPPED;
+ macWin->toplevel->referenceCount--;
macWin->toplevel = macWin;
+ macWin->toplevel->referenceCount++;
RemapWindows(winPtr, macWin);
winPtr->flags |=
(TK_TOP_HIERARCHY|TK_TOP_LEVEL|TK_HAS_WRAPPER|TK_WIN_MANAGED);
@@ -6599,7 +6603,9 @@ RemapWindows(
if (winPtr->window != None) {
MacDrawable *macWin = (MacDrawable *) winPtr->window;
+ macWin->toplevel->referenceCount--;
macWin->toplevel = parentWin->toplevel;
+ macWin->toplevel->referenceCount++;
winPtr->flags &= ~TK_MAPPED;
#ifdef TK_REBUILD_TOPLEVEL
winPtr->flags |= TK_REBUILD_TOPLEVEL;