Philippe Gerum wrote: > Jan Kiszka wrote: >> Dmitry Adamushko wrote: >> >> Indeed, this solves the issue more gracefully. >> >> Looking at this again from a different perspective and running the test >> case with your patch in a slightly different way, I think I >> misinterpreted the crash. If I modify task2 like this >> >> void task2_fnc(void *arg) >> { >> printf("started task2\n"); >> if (rt_mutex_lock(&mtx, 0) < 0) { >> printf("lock failed in task2\n"); >> return; >> } >> // rt_mutex_unlock(&mtx); >> >> printf("done task2\n"); >> } >> >> I'm also getting a crash. So the problem seems to be releasing a mutex >> ownership on task termination. Well, this needs further examination. >> > > The native skin does not implement robust mutex, indeed. Yeah, lunch opened my eyes: the skin data structure (RT_MUTEX) is not updated appropriately on task cleanup. What about some callback hook in xnsynch_t to invoke a per-skin cleanup handler when running xnsynch_release_all_ownerships? Jan