diff --git a/src/PeerAbstractCommand.cc b/src/PeerAbstractCommand.cc index 2fd3e343..63ec031e 100644 --- a/src/PeerAbstractCommand.cc +++ b/src/PeerAbstractCommand.cc @@ -106,7 +106,7 @@ bool PeerAbstractCommand::execute() } catch(DownloadFailureException& err) { A2_LOG_ERROR_EX(EX_DOWNLOAD_ABORTED, err); onAbort(); - onFailure(); + onFailure(err); return true; } catch(RecoverableException& err) { A2_LOG_DEBUG_EX(fmt(MSG_TORRENT_DOWNLOAD_ABORTED, diff --git a/src/PeerAbstractCommand.h b/src/PeerAbstractCommand.h index 511c422a..50aa719c 100644 --- a/src/PeerAbstractCommand.h +++ b/src/PeerAbstractCommand.h @@ -82,7 +82,7 @@ protected: virtual void onAbort() {}; // This function is called when DownloadFailureException is caught right after // the invocation of onAbort(). - virtual void onFailure() {}; + virtual void onFailure(const Exception& err) {}; virtual bool exitBeforeExecute() = 0; virtual bool executeInternal() = 0; void setReadCheckSocket(const SharedHandle& socket); diff --git a/src/PeerInteractionCommand.cc b/src/PeerInteractionCommand.cc index def697ed..dece90a8 100644 --- a/src/PeerInteractionCommand.cc +++ b/src/PeerInteractionCommand.cc @@ -367,8 +367,9 @@ void PeerInteractionCommand::onAbort() { peerStorage_->returnPeer(getPeer()); } -void PeerInteractionCommand::onFailure() +void PeerInteractionCommand::onFailure(const Exception& err) { + requestGroup_->setLastErrorCode(err.getErrorCode()); requestGroup_->setHaltRequested(true); } diff --git a/src/PeerInteractionCommand.h b/src/PeerInteractionCommand.h index 8e4fc6d3..9dbdecbd 100644 --- a/src/PeerInteractionCommand.h +++ b/src/PeerInteractionCommand.h @@ -71,7 +71,7 @@ protected: virtual bool executeInternal(); virtual bool prepareForNextPeer(time_t wait); virtual void onAbort(); - virtual void onFailure(); + virtual void onFailure(const Exception& err); virtual bool exitBeforeExecute(); public: PeerInteractionCommand(cuid_t cuid,