This is a status page for Bug #1976241 the winmerge.exe process doesn't stop itself.
Caused by Supercopier. Confirmed by bug submitters that disabling Supercopier makes the bug to disappear.
For reference, Supercopier bug: #1547940 Incompatibilit avec WinMerge
For some users, WinMerge executable process does not exit properly. The process is left in some kind of stuck state.
Release notes item will be added covering this.
Some. It is not known what triggers this. No complaints from experimental builds, but pretty quick reports after stable releases.
Stable releases 2.2.0 and all later versions. 2.0.2 stable version is not affected. Earlier we thought it was only 2.6.0 and later, but Gordon tested that 2.2.0 and 2.4.0 did hang too.
This rules out lots of stuff, like pcre/expat libraries, lots of new features etc.
The bug appears between experimental builds 188.8.131.52 and 184.108.40.206.
- 2008-06-26: 2.2.0 and 2.4.0 stable releases don't work either
- 2008-06-28: We finally have a working (2.0.2) and non-working version (2.2.0)! This is lots of patches still, but now we can look at beta- and experimental releases.
- 2008-06-30: We have working and non-working experimental build. 220.127.116.11 works and 18.104.22.168 does not work.
- 2008-07-01: Takashi found out that Supercopier is causing this bug. Case closed.
Simple, happens every time for affected users.
- Start WinMerge
- Close WinMerge
- WinMerge exits
- WinMerge is left hanging in the screen
Things known to not affect:
- plugins (none installed for affected user)
- archive support
- File/Folder compare frames/views/docs - opening just main window causes the bug
Since we used CVS at that time, Subversion revisions are generated by conversion script and may not be always accurate. However, looks like 22.214.171.124 was released from subversion revision 952 and 126.96.36.199 was released from revision 969.
List of revisions:
- 952: Remove _T()'s from _RPTF() macros (forgot to do before last checkin)
- 953: Fix bug in UniFile::WriteString counting of written bytes.
- 954: PATCH: [ 871789 ] Add "Copy to..." items to dirview context menu
- 955: PATCH: [ 876556 ] (Minor) code cleanup for SaveToFile - submitted by Perry
- 956: PATCH: 876875 Go To -Dialog
- 957: PATCH: [ 872413 ] UnpackDFM TestStreamFormat - Submitted by Michael Richter
- 958: PATCH: [ 878625 ] Simplify and unify file operations calling diff_2_files.
- 959: PATCH: [ 847121 ] Code cleanup (remove unneeded AssertValid & Dump implementations)
- 960: PATCH: [ 847121 ] Code cleanup (remove unneeded AssertValid & Dump implementations)
- 961: PATCH: 876875 Go To -Dialog - Fix crash in GotoDlg. This was in latest patch, but I merged part of older patch :(
- 962: PATCH: [ 880046 ] Save every line including last one in SaveToFile
- 963: UniStdioFile::OpenCreateUtf8 (shortcut for creating UTF-8 file)
- 964: Finish Merge7z integration
- 965: Fix bug 880320
- 966: Add comment explaining Jochen's change
- 967: Fix bug 880320
- 968: Add comment for "2004-01-16 WinMerge experimental release 188.8.131.52 (cvs)".
- 969: 2004-01-20 WinMerge experimental release 184.108.40.206 (cvs)
Done So Far
Kimmov has created executables with additional logging, which has revealed/confirmed:
- CMainFrame::OnClose() gets called and exits, but CMergeApp::ExitInstance() is not called
- Splash screen code is not involved when splash screen is disabled
1. Is the base reason of this bug. CWnd::OnClose() (which our CMainFrame::OnClose() overrides) checks if the application can be closed, if there are open references etc. And people have seen hangs when there has been some external libraries etc having references open, preventing CWnd::OnClose() sending close message. After that the framework would call CMergeApp::ExitInstance().
- #2002738 SplashScreen PostNcDestroy does not call base class
- #2004385 Detach menus before destroying
Both patches are real bugs, but they do not have affect to this bug.
Ideas to Try
Should try to:
- disable splash screen (eats events)
- remove CMainFrm::PreTranslateMessage() special handling (for ESC key)
Call DestroyMenu() for menus before deleting them in CMainMframe destructor. MSDN says it must be called for menus before app exit, but currently we aren't doing that.