Thank you for reporting!
This is nasty. It appears that on canceling a download the uploadlist is not processed. Then, some time later in CUpDownClient::CreateNextBlockPackage there's a CKnownFile* srcfile = theApp->sharedfiles->GetFileByID(CMD4Hash(currentblock->FileID));
if (!srcfile) {
throw wxString(wxT("requested file not found"));
}
which disconnects the client.
Before that, there is now a crash in CUploadQueue::CheckForTimeOver in cur_client->GetUploadFile()->GetUpPriority() because the CKnowFile pointed to was deleted.
I could copy the GetFileByID check over here too, but I'd prefer to go to the root of the problem and kick the clients from the uploadqueue on canceling a download.
Opinions?