diff options
author | dgp <dgp@users.sourceforge.net> | 2012-10-24 19:03:03 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2012-10-24 19:03:03 (GMT) |
commit | 65a7afe8edb4a3261f46a2e244503dd85066e1fe (patch) | |
tree | 4f995399f65af9a43d0364be00632521b8d40e49 /macosx | |
parent | 2057f61af78500da2956bf3aa83cc10878e93d09 (diff) | |
download | tk-65a7afe8edb4a3261f46a2e244503dd85066e1fe.zip tk-65a7afe8edb4a3261f46a2e244503dd85066e1fe.tar.gz tk-65a7afe8edb4a3261f46a2e244503dd85066e1fe.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')
-rw-r--r-- | macosx/tkMacOSXWm.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/macosx/tkMacOSXWm.c b/macosx/tkMacOSXWm.c index 1f4e2e2..45f0fd5 100644 --- a/macosx/tkMacOSXWm.c +++ b/macosx/tkMacOSXWm.c @@ -1654,7 +1654,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); @@ -2419,7 +2421,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); @@ -6536,7 +6540,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; |