1. DC++ tries to save a downloaded tree in hash data but the data file isn't writable.
2. The client searches for other downloads from the same user and finds the same file again.
3. The client can't find the tree for that file and downloads it again (back to step 1.)
While the problem happens relatively rarely on Windows, it's much more common with Linux clients.
I've fixed this issue in AirDC++ 2.50 by catching the database exceptions in DownloadManager::endData, forwarding the error to the connecting item and changing the item to a state where it will connect only when the user manually forces the connection.
It goes as follows:
1. DC++ tries to save a downloaded tree in hash data but the data file isn't writable.
2. The client searches for other downloads from the same user and finds the same file again.
3. The client can't find the tree for that file and downloads it again (back to step 1.)
While the problem happens relatively rarely on Windows, it's much more common with Linux clients.
I've fixed this issue in AirDC++ 2.50 by catching the database exceptions in DownloadManager ::endData, forwarding the error to the connecting item and changing the item to a state where it will connect only when the user manually forces the connection.