First, thank you for creating and maintaining TSVN, I've used it for a long time now and am very happy with it.
Now to my bug report:
Simultaneous manual update of log cache of multiple repositories under certain circumstances leads to progress messages from different working copies to be logged into the same progress display window (entitled "Updating log cache"). A client crash happens as soon as the update of the log cache finishes whose window is used are progress display target if there are still other updates in progress. I did not find this reported yet or already fixed on HEAD.
Client: TortoiseSVN 1.6.8, Build 19260 - 32 Bit , 2010/04/16 20:20:11
System: Windows XP SP3
Steps to reproduce:
1. Check out working copies from two different repositories with many revisions, say repository A and B. See notes below on the access speed.
2. Clear the repository's log caches in the "Log Caching" -> "Cached Repositories" item of the TSVN settings.
3. Retrieve *some* log messages from each repository by invoking "Show log..." on an arbitrary folder of each of the working copies so the repositories get listed in the "Cached Repositories" section.
4. Go to the TSVN settings and navigate to the "Log Caching" -> "Cached Repositories" item.
5. Click on repository A and invoke "Update".
6. While the update for A is running, but transfer has not yet started, select repository B and invoke "Update" as well.
- Status messages for A are displayed in the first window.
- Status messages for B are displayed in the second window.
- The window for repository A stays empty (no status text), but the window for repository B receives all progress output (text plus status bar). I know that because in window B, I sometimes see messages that "Revision 4419" is retrieved (which is a valid revision number for repository B), but I also see messages about "Revision 6272" (which is nonexistent in B, but exists in A).
- Note that in my case, repository A is on a server with *low bandwidth* and takes some time to initialize. Repository B is in the LAN and access is very fast. I think this is the origin of the problem, because after initialization of A is finished, it by accident uses the "newest" window as status message target, which is actually the one for B.
- When update of B finishes before A does or when you close window B with "Cancel" while A is still running, the crash happens.
It might not be possible to reproduce the problem if A is fast enough to initialize updating before B does. But it should be easy to spot in the code that A accidentally uses B's window when finished initializing: "dialog->progress" is shared between all WorkerThreads in TortoiseProc/Settings/SettingsLogCaches.cpp.
I can also send a crash dump file if you need it (although I would like not sending it to the public mailing list, hence not attached here). I can reproduce it quite well so if you need further help, just ask.
To unsubscribe from this discussion, e-mail: [users-unsubscribe_at_tortoisesvn.tigris.org].
Received on 2010-05-03 17:06:01 CEST