[PATCH] winegstreamer: Check the callback list before waiting.
Rémi Bernon
rbernon at codeweavers.com
Wed Mar 25 18:03:18 CDT 2020
Some callbacks may be pushed during pipeline initialization and before
the dispatch thread is actually started and waiting for them, which
sometimes causes some hangs.
This fixes Fallout 3 and Panzer Corps -and possibly others- intro videos
hanging forever.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/winegstreamer/gst_cbs.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/dlls/winegstreamer/gst_cbs.c b/dlls/winegstreamer/gst_cbs.c
index a0618798d895..bf7103b1606b 100644
--- a/dlls/winegstreamer/gst_cbs.c
+++ b/dlls/winegstreamer/gst_cbs.c
@@ -66,15 +66,11 @@ static DWORD WINAPI dispatch_thread(void *user)
while (1)
{
- pthread_cond_wait(&cb_list_cond, &cb_list_lock);
+ while (list_empty(&cb_list)) pthread_cond_wait(&cb_list_cond, &cb_list_lock);
- while (!list_empty(&cb_list))
- {
- cbdata = LIST_ENTRY(list_head(&cb_list), struct cb_data, entry);
- list_remove(&cbdata->entry);
-
- TrySubmitThreadpoolCallback(&perform_cb, cbdata, NULL);
- }
+ cbdata = LIST_ENTRY(list_head(&cb_list), struct cb_data, entry);
+ list_remove(&cbdata->entry);
+ TrySubmitThreadpoolCallback(&perform_cb, cbdata, NULL);
}
pthread_mutex_unlock(&cb_list_lock);
--
2.26.0.rc2
More information about the wine-devel
mailing list