Fix Client.cpp

GitOrigin-RevId: bf4de7283b1d5a4b230c20cae1f7b0d2bb89c919
This commit is contained in:
Arseny Smirnov 2018-09-13 14:55:55 +03:00
parent 63ffada352
commit 9225edd757

View File

@ -225,12 +225,16 @@ class Client::Impl final {
~Impl() {
input_queue_->writer_put({0, nullptr});
scheduler_thread_.join();
#if !TD_WINDOWS
auto &event_fd = output_queue_->reader_get_event_fd();
poll_.unsubscribe(event_fd.get_poll_info().get_pollable_fd_ref());
#endif
}
private:
#if !TD_WINDOWS
Poll poll_;
#endif
std::shared_ptr<InputQueue> input_queue_;
std::shared_ptr<OutputQueue> output_queue_;
std::shared_ptr<ConcurrentScheduler> scheduler_;
@ -254,9 +258,11 @@ class Client::Impl final {
scheduler->finish();
});
#if !TD_WINDOWS
poll_.init();
auto &event_fd = output_queue_->reader_get_event_fd();
poll_.subscribe(event_fd.get_poll_info().extract_pollable_fd(nullptr), PollFlags::Read());
#endif
}
Response receive_unlocked(double timeout) {
@ -268,7 +274,11 @@ class Client::Impl final {
return output_queue_->reader_get_unsafe();
}
if (timeout != 0) {
#if TD_WINDOWS
output_queue_->reader_get_event_fd().wait(static_cast<int>(timeout * 1000));
#else
poll_.run(static_cast<int>(timeout * 1000));
#endif
return receive_unlocked(0);
}
return {0, nullptr};