X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FReadHelper.ct;h=ce7e75c926fcca23fc93bb7ee2a83e23cb13dca3;hb=d084c02e4914da4fa1a4098a33d704f69e8bdedd;hp=3ac3df5f55a0d3e8364cddb878ad158ec1a2da52;hpb=85ab07d100a382467a42e19d741d403a7a96c951;p=senf.git diff --git a/Scheduler/ReadHelper.ct b/Scheduler/ReadHelper.ct index 3ac3df5..ce7e75c 100644 --- a/Scheduler/ReadHelper.ct +++ b/Scheduler/ReadHelper.ct @@ -69,11 +69,11 @@ template prefix_ void senf::ReadHelper::process(Handle handle, senf::Scheduler::EventId event) { - /** \fixme Move the done() calls to outside the try/catch block */ try { if (event != senf::Scheduler::EV_READ) throw SystemException(EPIPE); - std::string rcv (handle.read(maxSize_ - data_.size())); + std::string rcv; + handle.read(rcv, maxSize_ - data_.size()); data_.append(rcv); std::string::size_type n = predicate_ ? (*predicate_)(data_) : std::string::npos; if (n != std::string::npos || data_.size() >= maxSize_ || rcv.size() == 0) { @@ -82,13 +82,15 @@ prefix_ void senf::ReadHelper::process(Handle handle, tail_.assign(data_,n,std::string::npos); data_.erase(n); } - done(); } } catch (senf::SystemException const & ex) { errno_ = ex.err; done(); + return; } + if (complete_) + done(); } template @@ -117,4 +119,6 @@ operator()(std::string const & data) // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: