diff --git a/src/shared/drivers/WIZ5500/WIZ5500.cpp b/src/shared/drivers/WIZ5500/WIZ5500.cpp index 4f0159743bc43a917a714c73d498321b966bf7c4..bf272bb5fa8aebafb60e51afb78bce16814fe9f4 100644 --- a/src/shared/drivers/WIZ5500/WIZ5500.cpp +++ b/src/shared/drivers/WIZ5500/WIZ5500.cpp @@ -25,6 +25,7 @@ #include <drivers/interrupt/external_interrupts.h> #include <interfaces/endianness.h> #include <kernel/scheduler/scheduler.h> +#include <utils/Debug.h> #include <utils/KernelTime.h> #include "WIZ5500Defs.h" @@ -464,6 +465,8 @@ int Wiz5500::waitForSocketIrq(miosix::Lock<miosix::FastMutex>& l, int sock_n, while (wait_infos[i].irq == 0 && result == TimedWaitResult::NoTimeout && interrupt_service_thread != this_thread) { + if (Kernel::getOldTick() > start + timeout) + break; if (timeout != -1) { result = Kernel::Thread::IRQenableIrqAndTimedWaitMs( @@ -484,6 +487,9 @@ int Wiz5500::waitForSocketIrq(miosix::Lock<miosix::FastMutex>& l, int sock_n, while (interrupt_service_thread == this_thread) { + if (Kernel::getOldTick() > start + timeout) + break; + // Run a single step of the ISR if (timeout == -1) result = runInterruptServiceRoutine(l, -1);