From: Toni Wilen Date: Sun, 14 Feb 2016 16:37:08 +0000 (+0200) Subject: Do not generate new uae_Signal() if previous is still queued. It can cause deadlock... X-Git-Tag: 3300~78 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=cb1e7a9bd514b346b6891298b249d3594c1213b1;p=francis%2Fwinuae.git Do not generate new uae_Signal() if previous is still queued. It can cause deadlock if buffer fills completely. --- diff --git a/sana2.cpp b/sana2.cpp index 555d7d25..f3383ce9 100644 --- a/sana2.cpp +++ b/sana2.cpp @@ -330,11 +330,19 @@ static int openfail (TrapContext *ctx, uaecptr ioreq, int error) } static uaecptr uaenet_worker; +static int uaenet_signal_state; + +static void uaenet_signal_done(int cmd) +{ + uaenet_signal_state = 1; +} static void uaenet_int(void) { - if (uaenet_worker) - uae_Signal(uaenet_worker, 0x100); + if (uaenet_worker && uaenet_signal_state) { + uaenet_signal_state = 0; + uae_Signal_with_Func(uaenet_worker, 0x100, uaenet_signal_done); + } } static uae_u32 REGPARAM2 uaenet_int_handler (TrapContext *ctx); @@ -1886,6 +1894,7 @@ void netdev_start_threads (void) void netdev_reset (void) { + uaenet_signal_state = 1; if (!currprefs.sana2) return; dev_reset ();