diff options
Diffstat (limited to 'cpp/src/Ice/Selector.cpp')
-rw-r--r-- | cpp/src/Ice/Selector.cpp | 11 |
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; } |