X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FWriteHelper.ct;h=9dfa7479367a818fafb89ffb6454b1de154b0b4c;hb=8421c3a8da7485cb8781045494ecaab3ed84f403;hp=2fa26020aca199ab7786dc6768caa8410ad92973;hpb=85ab07d100a382467a42e19d741d403a7a96c951;p=senf.git diff --git a/Scheduler/WriteHelper.ct b/Scheduler/WriteHelper.ct index 2fa2602..9dfa747 100644 --- a/Scheduler/WriteHelper.ct +++ b/Scheduler/WriteHelper.ct @@ -75,20 +75,23 @@ template prefix_ void senf::WriteHelper::process(Handle handle, senf::Scheduler::EventId event) { - /** \fixme Move the done() calls to outside the try/catch block */ + bool complete_ (false); try { if (event != senf::Scheduler::EV_WRITE) throw senf::SystemException(EPIPE); offset_ += handle.write(data_.data()+offset_,data_.size()-offset_); if (offset_ >= data_.size()) { data_.erase(); - done(); + complete_ = true; } } catch (senf::SystemException const & ex) { errno_ = ex.err; done(); + return; } + if (complete_) + done(); } template