Wake up the libevent loop by using loopexit instead of loopbreak

This provides a more reliable way to wake up the event loop from another thread.

Based on the patch submitted by Marten Richter via <https://github.com/google/quiche/pull/30>.

PiperOrigin-RevId: 495633345
diff --git a/quiche/quic/bindings/quic_libevent.cc b/quiche/quic/bindings/quic_libevent.cc
index 996d70b..a053d35 100644
--- a/quiche/quic/bindings/quic_libevent.cc
+++ b/quiche/quic/bindings/quic_libevent.cc
@@ -118,7 +118,10 @@
   event_base_loop(base_, EVLOOP_ONCE);
 }
 
-void LibeventQuicEventLoop::WakeUp() { event_base_loopbreak(base_); }
+void LibeventQuicEventLoop::WakeUp() {
+  timeval timeout = absl::ToTimeval(absl::ZeroDuration());
+  event_base_loopexit(base_, &timeout);
+}
 
 LibeventQuicEventLoop::Registration::Registration(
     LibeventQuicEventLoop* loop, QuicUdpSocketFd fd, QuicSocketEventMask events,