From 217bbc3e940ee8886fc851ec46a90439e6c96431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 22 Jan 2020 09:21:10 +0200 Subject: [PATCH] bus: Take the mutex before popping messages for the bus stream Otherwise a message might arrive between popping, getting None and locking the mutex for storing the waker. In that case we would never be woken up. --- gstreamer/src/bus.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gstreamer/src/bus.rs b/gstreamer/src/bus.rs index c5db1f30e..14bd54db7 100644 --- a/gstreamer/src/bus.rs +++ b/gstreamer/src/bus.rs @@ -269,11 +269,11 @@ impl Stream for BusStream { fn poll_next(self: Pin<&mut Self>, ctx: &mut Context) -> Poll> { let BusStream(ref bus, ref waker) = *self; + let mut waker = waker.lock().unwrap(); let msg = bus.pop(); if let Some(msg) = msg { Poll::Ready(Some(msg)) } else { - let mut waker = waker.lock().unwrap(); *waker = Some(ctx.waker().clone()); Poll::Pending }