- if (system.poll(&events, 1, -1) > 0 && (events.revents & POLLIN))
- asyncStorage->handleEvents();
+ pollAndHandleEvents(NO_TIMEOUT);
+}
+
+void SyncStorageImpl::pollAndHandleEvents(int timeout_ms)
+{
+ if (system.poll(&events, 1, timeout_ms) > 0 && (events.revents & POLLIN))
+ asyncStorage->handleEvents();
+}
+
+void SyncStorageImpl::waitForReadinessCheckCallback(const std::chrono::steady_clock::duration& timeout)
+{
+ if (timeout == std::chrono::steady_clock::duration::zero())
+ {
+ while (!isReady)
+ pollAndHandleEvents(NO_TIMEOUT);
+ }
+ else
+ {
+ auto timeout_ms(std::chrono::duration_cast<std::chrono::milliseconds>(timeout).count());
+ auto pollTimeout_ms(timeout_ms / 10);
+ std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();
+ while(!isReady && (std::chrono::steady_clock::now() - start < std::chrono::milliseconds(timeout_ms)))
+ pollAndHandleEvents(pollTimeout_ms);
+ }