From b4c1e801c5978982885bfe1f0b4f6c09c725a3dc Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 20 Feb 2022 02:00:23 +0100 Subject: [PATCH] Some more network changes. --- src/network/net_pcap.c | 10 ++++++---- src/network/net_slirp.c | 11 +++++++---- src/network/network.c | 4 ++++ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/network/net_pcap.c b/src/network/net_pcap.c index 7008d1442..94f050f76 100644 --- a/src/network/net_pcap.c +++ b/src/network/net_pcap.c @@ -183,8 +183,10 @@ poll_thread(void *arg) /* Wait for a poll request. */ network_poll(); - if (pcap == NULL) + if (pcap == NULL) { + network_wait(0); break; + } if (network_get_wait() || (poll_card->set_link_state && poll_card->set_link_state(poll_card->priv)) || (poll_card->wait && poll_card->wait(poll_card->priv))) data = NULL; @@ -213,12 +215,12 @@ poll_thread(void *arg) if (tx) network_do_tx(); + /* Release ownership of the device. */ + network_wait(0); + /* If we did not get anything, wait a while. */ if (!tx) thread_wait_event(evt, 10); - - /* Release ownership of the device. */ - network_wait(0); } /* No longer needed. */ diff --git a/src/network/net_slirp.c b/src/network/net_slirp.c index b4b46bbe7..ab672cb3f 100644 --- a/src/network/net_slirp.c +++ b/src/network/net_slirp.c @@ -366,7 +366,10 @@ poll_thread(void *arg) network_poll(); /* Stop processing if asked to. */ - if (slirp->stop) break; + if (slirp->stop) { + network_wait(0); + break; + } /* See if there is any work. */ slirp_tic(slirp); @@ -377,12 +380,12 @@ poll_thread(void *arg) if (tx) network_do_tx(); + /* Release ownership of the queue. */ + network_wait(0); + /* If we did not get anything, wait a while. */ if (!tx) thread_wait_event(evt, 10); - - /* Release ownership of the queue. */ - network_wait(0); } /* No longer needed. */ diff --git a/src/network/network.c b/src/network/network.c index 44408a873..b99f32adf 100644 --- a/src/network/network.c +++ b/src/network/network.c @@ -204,9 +204,13 @@ network_wait(uint8_t wait) void network_poll(void) { + network_wait(0); + while (poll_data.busy) thread_wait_event(poll_data.wake_poll_thread, -1); + network_wait(1); + thread_reset_event(poll_data.wake_poll_thread); }