<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi,<div>I eliminated the theory of memory corruption. I debugged and found we set Wait.flags = 0x104 with a function call.</div><div>The USB interrupt can arrive at any time, so Wait.flags can be either INTEND_TO_BLOCK, BLOCKED or READY_AGAIN.</div><div><br></div><div>Following the logic in _Event_Surrender:</div><div>If it arrives when Wait.flags = INTEND_TO_BLOCK then _Thread_Wait_flags_try_change_critical will return TRUE, Wait.flags will be set to READY_AGAIN,</div><div>unblock = FALSE so _Thread_Unblock will not be called.</div><div>Then all the other USB interrupts will catch Wait.flags = READY_AGAIN and in this case_Event_Surrender doesn't do anything because unblock = FALSE</div><div><br></div><div>.. so the task never runs again, but state remains marked as READY.</div><div>is this a bug ? or I'm not understanding correctly?</div><div><br></div><div>regards,</div><div>Catalin</div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Oct 3, 2018 at 2:42 PM Catalin Demergian <<a href="mailto:demergian@gmail.com">demergian@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">ok, I understand. The code in _Event_Is_blocking_on_event is correct, it just verifies if the thread is in wait state or not.</div><div dir="ltr">The only thing that varies is what _Thread_Wait_flags_get returns. In my case, it returned 0x102 for 5401 times,</div><div dir="ltr">but 5402th time it returned 0x104; because of that, ( wait_flags & wait_mask ) == wait_class didn't hold true anymore.<br><div>0x104 means the thread is ready .. why is marked as ready instead of blocked is another problem. could it be a memory</div><div>corruption, possibly, but I doubt it, a memory corruption would set it most likely to a value without meaning, but in my case it's</div><div>exactly 0x104.</div><div>I think one of the functions _Thread_Wait_flags_set/_Thread_Wait_flags_try_change may set this value.</div><div>I will check this theory.</div><div><br></div><div>regards,</div><div>Catalin</div><div><br><div><br></div></div></div></div></div></div>
</blockquote></div>