summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Selector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/Selector.cpp')
-rw-r--r--cpp/src/Ice/Selector.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/cpp/src/Ice/Selector.cpp b/cpp/src/Ice/Selector.cpp
index ebffee5325e..8c0a4eed0c9 100644
--- a/cpp/src/Ice/Selector.cpp
+++ b/cpp/src/Ice/Selector.cpp
@@ -711,6 +711,7 @@ Selector::select(int timeout)
timeout = -1;
}
+ int spuriousWakeup = 0;
while(true)
{
#if defined(ICE_USE_EPOLL)
@@ -759,6 +760,16 @@ Selector::select(int timeout)
out << "selector failed:\n" << ex;
IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(5)); // Sleep 5s to avoid looping
}
+ else if(_count == 0 && timeout < 0 && ++spuriousWakeup < 100)
+ {
+ if(spuriousWakeup == 1)
+ {
+ Ice::Warning out(_instance->initializationData().logger);
+ out << "spurious selector wakeup";
+ }
+ IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1));
+ continue;
+ }
break;
}