# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: poy@123gen.com-20100516135432-3ezbadunhek34znv # target_branch: bzr+ssh://poy@bazaar.launchpad.net/%7Edcplusplus-\ # team/dcplusplus/trunk/ # testament_sha1: 30aa50bd05afad4d175f0ece88e6b2e7302fe408 # timestamp: 2010-05-16 15:55:26 +0200 # base_revision_id: poy@123gen.com-20100513140323-fry1mbc1icpe6hxb # # Begin patch === modified file 'dcpp/DownloadManager.cpp' --- dcpp/DownloadManager.cpp 2010-04-23 18:40:39 +0000 +++ dcpp/DownloadManager.cpp 2010-05-16 13:54:32 +0000 @@ -300,7 +300,7 @@ dcassert(d != NULL); if(d->getType() == Transfer::TYPE_TREE) { - d->getFile()->flush(); + flush(d); int64_t bl = 1024; while(bl * (int64_t)d->getTigerTree().getLeaves().size() < d->getTigerTree().getFileSize()) @@ -321,15 +321,10 @@ return; } d->setTreeValid(true); + } else { // First, finish writing the file (flushing the buffers and closing the file...) - try { - d->getFile()->flush(); - } catch(const FileException& e) { - d->resetPos(); - failDownload(aSource, e.getError()); - return; - } + flush(d); aSource->setSpeed(d->getAverageSpeed()); aSource->updateChunkSize(d->getTigerTree().getBlockSize(), d->getSize(), GET_TICK() - d->getStart()); @@ -415,6 +410,15 @@ LOG(LogManager::DOWNLOAD, params); } +void DownloadManager::flush(Download* d) { + try { + d->getFile()->flush(); + } catch(const Exception& e) { + d->resetPos(); + throw e; + } +} + void DownloadManager::on(UserConnectionListener::MaxedOut, UserConnection* aSource) throw() { noSlots(aSource); } @@ -461,8 +465,9 @@ if(d->getFile()) { if(d->getActual() > 0) { try { - d->getFile()->flush(); + flush(d); } catch(const Exception&) { + // the download is already being removed anyway, so ignore exceptions at this point } } } === modified file 'dcpp/DownloadManager.h' --- dcpp/DownloadManager.h 2010-02-11 21:44:13 +0000 +++ dcpp/DownloadManager.h 2010-05-16 13:54:32 +0000 @@ -71,7 +71,7 @@ void logDownload(UserConnection* aSource, Download* d); uint32_t calcCrc32(const string& file) throw(FileException); bool checkSfv(UserConnection* aSource, Download* d); - int64_t getResumePos(const string& file, const TigerTree& tt, int64_t startPos); + void flush(Download* d); void failDownload(UserConnection* aSource, const string& reason); # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWbSfLxwAAoPfgEAwU3f//1cC QAC/7//6UATap6gBm2hoMQJJJoaU8mp6jaj1NpqPU9R6TTTQaAPUAOYACYAAmAAAAAAkSRoJqn5G lD2U9TU9J6hkGjE0PRNDQ5gAJgACYAAAAACSSYIATEaQaNNU8QxpR4UDQ9RgQk0MMD/DOaIgfnty 3eydbb8XL89vkcuH7mrneyna/DRe+MAqklwmMIS0QIZ6K/2i1bicZmEzGXsldnTVRdg6IY9cF84K cIhybdFUu+z1EPDXfxPxVx/sudn3PlZRe+JmIo3FL8nRGTGxg7d9xNgcmWnVdjWzMR9Oolc524E7 nsiEShnFd9bdL8yUWL7e5MLiYULGSKgLxbYDhdwu9eNznywQuwX99fpqZr2JbMyhVEElsouFwCfG 5CZCvqkYcDzcJ4Ks0XmYmFBQkE8rLCdgibTKRMKpCcUwq90Lu4vay2qlP+EwEcFuTqCmIEnnvdPe UqB6eIHNarbpU1RTe4CHCDtUKgV85y2uLCI8I5iihUajOrZHuIxJnGZqdWF5IKakydW60DWEUyee IDIMDfCkXRkUGYD0LO0ddo1bMoMqiYr7h1AD4kCAflPHW3D9DNTFqKgxLiRoYgXNhAzqKhVGKRQp AXMdLywVR1l+Ssq+WzQYKGhc4vKgcqxMVpz2nKGwa63RQtAoueriQ87mZrCsvpI3hgfZgcXE8tKi OJfQ0i8XhdErlmWDHRnXczCtNBi02GWkcx+RE6BUGYsGO3eLAVFd1QTQyfWsEQ8NjI3HsubJd7NJ lI9mYOE8ZdAzdvPd9IlXIm4yKHNCxFnTeNNvl1ngWMfCl7gxYtaUKwwTQ8PrQYM6pCuOo3jjMT+0 aUil4DVUlqKkseyPleuH5SljqzIM9DHfl8H3+vvxFiOcGZqdJSagMWLuE8qLoEuHBItXUJivFV8z ztNRlnpk+tCs98lUKhMUcG5k5pnH4F+TIuFswLQcGI6xKlLeSLTzBPsOCuOT0Hfx5qDFJ6F+Iu0w 5v2XLzO8s5EOS/gut4MYD0bNnvZkZHlDZIB00JiaZKZW8XZg6jyzCW0Y2J+UnPQZzR1AS0yPEW0v PDr0PYW44G8+nH3Md5xFyJipWwtXoaiZd/A7Wet8SsWuR7krkJkoT5bcGGVbJhhdtVQDjFYIHcR+ a/B9JeUTis9T3YM4D4os/Sr06Xx2TYBneXkg+0Dz3FgHLQW00RIOlLL1ikWUdVkfMW5JhQ2oXa1q 6U9fOtJnLKPBaxgQQmxZKKWqaCJP7KDMC9heyR285EbEMwvUByr037dyRu3lHUhQaYilnRRojSpT oTfV26XI+kEQE/etNNA+1KwWoMRQL12Wvt8rYZcQDKkGznleO0y7o5mIwRJ0cb5gfK2UW9MjU1LV Xt6LlfRtDpvrJsmKG9E5PfvfLEVFNQ3mZSKUoXoVaBkw2b5iqK2mJ1tT3N2cdXjyJ8hJ7sbbQmxz xvKDMpqRWvVvQVLibBm45XMA4U7QREC1lgg9uuuGsnJHx0L+aRPtt0bJgc9CdRc0QMV8gO8tyxxP /F3JFOFCQtJ8vHA=