Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
Thread::signal_wait seems to be erroneous:
Thread.cpp
osEvent Thread::signal_wait(int32_t signals, uint32_t millisec) { uint32_t res; osEvent evt; uint32_t options = osFlagsWaitAll; if (signals == 0) { options = osFlagsWaitAny; signals = 0x7FFFFFFF; } res = osThreadFlagsWait(signals, options, millisec); if (res & osFlagsError) { switch (res) { case osFlagsErrorISR: evt.status = osErrorISR; break; case osFlagsErrorResource: evt.status = osOK; break; case osFlagsErrorTimeout: evt.status = (osStatus)osEventTimeout; break; case osFlagsErrorParameter: default: evt.status = (osStatus)osErrorValue; break; } } evt.status = (osStatus)osEventSignal; evt.value.signals = res; return evt; }When a osFlagsError occurs, evt.status is written, but the break afterwards jumps to evt.status = (osStatus)osEventSignal;
A return statement before the closing } if-bracket would solve the problem (maybe clear evt.value.signals to 0 first).