]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Do not generate new uae_Signal() if previous is still queued. It can cause deadlock...
authorToni Wilen <twilen@winuae.net>
Sun, 14 Feb 2016 16:37:08 +0000 (18:37 +0200)
committerToni Wilen <twilen@winuae.net>
Sun, 14 Feb 2016 16:37:08 +0000 (18:37 +0200)
sana2.cpp

index 555d7d25aed2d909982489d93078c005bd5e45e3..f3383ce9ab98d39fb4178aee52a4d21665101ef7 100644 (file)
--- 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 ();