Scheduler: Fix timeout/watchdog interference bug
g0dil [Tue, 3 Nov 2009 09:34:17 +0000 (09:34 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1513 270642c3-0616-0410-b53a-bc976706d245

senf/PPI/SocketSink.hh
senf/Scheduler/Poller.ct

index a599816..a42a0b9 100644 (file)
@@ -241,10 +241,10 @@ namespace module {
         able to handle complete datagrams.
 
         This output module will write data to a FileHandle object using a given \a Writer. This
-        output module is passive. This implies, that the output handle may not block. This also
-        implies, that data will probably get lost if written to fast for the underlying transport
-        mechanism. Either this is desired (like for a UDP socket) or some additional bandwidth
-        shaping needs to be used.
+        output module is passive. This implies, that <em>the output handle may not block</em>. This
+        also implies, that data will probably get lost if written to fast for the underlying
+        transport mechanism. Either this is desired (like for a UDP socket) or some additional
+        bandwidth shaping needs to be used.
 
         The default \a Writer is senf::ppi::ConnectedDgramWriter which will write out the complete packet to
         the file handle.
index 0cd1f07..bbe5c31 100644 (file)
@@ -65,14 +65,12 @@ prefix_ typename senf::scheduler::detail::Poller<Value>::range senf::scheduler::
 {
     static epoll_event events[NumEvents];
     int rv (0);
-    for (;;) {
-        rv = epoll_wait(epollFd_, events, NumEvents, timeout_);
-        if (rv == -1) {
-            if (errno == EINTR)
-                continue;
+    rv = epoll_wait(epollFd_, events, NumEvents, timeout_);
+    if (rv == -1) {
+        if (errno == EINTR)
+            rv = 0;
+        else
             SENF_THROW_SYSTEM_EXCEPTION("epoll_wait()");
-        }
-        break;
     }
     return boost::make_iterator_range(
         boost::make_transform_iterator(events, GetPollResult()),