From c3fbc48d4c2d99a53379917eabfcae4777e4375b Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 12 Jul 2008 07:46:33 +0000 Subject: [PATCH] 2008-07-12 Tatsuhiro Tsujikawa Moved the calls of std::ios::exceptions() inside of try-catch block because if an error occurred in constructor of std::fstream, then exception is thrown immediately when std::ios::exceptions() is called which results unhandled exception and aria2c aborts. * src/DefaultBtProgressInfoFile.cc --- ChangeLog | 8 ++++++++ src/DefaultBtProgressInfoFile.cc | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index f144be9b..3bf48511 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-07-12 Tatsuhiro Tsujikawa + + Moved the calls of std::ios::exceptions() inside of try-catch block + because if an error occurred in constructor of std::fstream, then + exception is thrown immediately when std::ios::exceptions() is called + which results unhandled exception and aria2c aborts. + * src/DefaultBtProgressInfoFile.cc + 2008-07-12 Tatsuhiro Tsujikawa Added the test for the previous change in DefaultBtContext.cc diff --git a/src/DefaultBtProgressInfoFile.cc b/src/DefaultBtProgressInfoFile.cc index 91d580a8..69510e8c 100644 --- a/src/DefaultBtProgressInfoFile.cc +++ b/src/DefaultBtProgressInfoFile.cc @@ -91,8 +91,8 @@ void DefaultBtProgressInfoFile::save() { _logger->info(MSG_SAVING_SEGMENT_FILE, _filename.c_str()); std::string filenameTemp = _filename+"__temp"; std::ofstream o(filenameTemp.c_str(), std::ios::out|std::ios::binary); - o.exceptions(std::ios::failbit); try { + o.exceptions(std::ios::failbit); bool torrentDownload = isTorrentDownload(); // file version: 16 bits // value: '0' @@ -175,10 +175,10 @@ void DefaultBtProgressInfoFile::load() { _logger->info(MSG_LOADING_SEGMENT_FILE, _filename.c_str()); std::ifstream in(_filename.c_str(), std::ios::in|std::ios::binary); - in.exceptions(std::ios::failbit); unsigned char* savedInfoHash = 0; unsigned char* savedBitfield = 0; try { + in.exceptions(std::ios::failbit); unsigned char version[2]; in.read((char*)version, sizeof(version)); if(DefaultBtProgressInfoFile::V0000 != Util::toHex(version, sizeof(version))) {