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");
//        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.

Looks like the issue is limited to cleanup problems and is not that
widespread to other skins as I thought. RTDM is not involved as it does
not know EINTR for rtdm_mutex_lock. The POSIX skins runs in a loop on
interruption and should recover from this.

I can confirm with the help of the simulator that there's no issue regarding the way the ownership is transferred back and forth between both tasks, this works. However, I agree that this should not preclude us from improving the priority inversion guard, by allowing the lock to be stolen if the new owner has not resumed execution yet, after it has been granted the mutex ownership.

Besides this, we then may want to consider if introducing a pending
ownership of synch objects is worthwhile to improve efficiency of PIP
users. Not critical, but if it comes at a reasonable price... Will try
to draft something.



Xenomai-core mailing list



Xenomai-core mailing list

Reply via email to