diff --git a/src/shared/drivers/WIZ5500/WIZ5500.cpp b/src/shared/drivers/WIZ5500/WIZ5500.cpp index 43dc983def415ad9796306a4b59d02d6f046241c..9af411fdd963a8ce61ab7890b2763a3674313124 100644 --- a/src/shared/drivers/WIZ5500/WIZ5500.cpp +++ b/src/shared/drivers/WIZ5500/WIZ5500.cpp @@ -494,19 +494,25 @@ int Wiz5500::waitForSocketIrq(miosix::Lock<miosix::FastMutex>& l, int sock_n, // service thread if (wait_infos[i].irq != 0) { + Thread* new_interrupt_service_thread = nullptr; + for (int j = 0; j < NUM_THREAD_WAIT_INFOS; j++) { - if (wait_infos[j].irq == 0) + if (wait_infos[j].irq == 0 && wait_infos[j].sock_n != -1 && + j != i) { - { - FastInterruptDisableLock il; - interrupt_service_thread = wait_infos[j].thread; - } - - wait_infos[j].thread->wakeup(); + new_interrupt_service_thread = wait_infos[j].thread; break; } } + + { + FastInterruptDisableLock il; + interrupt_service_thread = new_interrupt_service_thread; + } + + if (new_interrupt_service_thread) + new_interrupt_service_thread->wakeup(); } }