diff --git a/src/shared/drivers/WIZ5500/WIZ5500.cpp b/src/shared/drivers/WIZ5500/WIZ5500.cpp index 721d0fa13eae724c30769adc3eab193b8768196c..20e2dbd461b987a9c7818e80c19c0b9e51082f89 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" @@ -463,6 +464,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( @@ -483,6 +486,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);