On 04/19/2018 11:17 AM, Philippe Gerum wrote:
> On 04/17/2018 09:30 AM, Jan Kiszka wrote:
>> On 2018-04-17 09:22, Philippe Gerum wrote:
>>> On 04/13/2018 07:51 PM, Jan Kiszka wrote:
>>>> None of the callers that run into the locks have RT requirements.
>>>>
>>>> Signed-off-by: Jan Kiszka <jan.kis...@siemens.com>
>>>> ---
>>>>
>>>> As noted before, I think we should even be fine with STD locks, but that
>>>> may require more changes.
>>>>
>>>>  lib/copperplate/registry.c | 2 --
>>>>  1 file changed, 2 deletions(-)
>>>>
>>>> diff --git a/lib/copperplate/registry.c b/lib/copperplate/registry.c
>>>> index daefa6c97..1bf0ebfea 100644
>>>> --- a/lib/copperplate/registry.c
>>>> +++ b/lib/copperplate/registry.c
>>>> @@ -175,7 +175,6 @@ int registry_init_file(struct fsobj *fsobj,
>>>>  
>>>>    pthread_mutexattr_init(&mattr);
>>>>    pthread_mutexattr_settype(&mattr, mutex_type_attribute);
>>>> -  pthread_mutexattr_setprotocol(&mattr, PTHREAD_PRIO_INHERIT);
>>>>    pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_PRIVATE);
>>>>    ret = __bt(-__RT(pthread_mutex_init(&fsobj->lock, &mattr)));
>>>>    pthread_mutexattr_destroy(&mattr);
>>>> @@ -758,7 +757,6 @@ int __registry_pkg_init(const char *arg0, char 
>>>> *mountpt, int flags)
>>>>  
>>>>    pthread_mutexattr_init(&mattr);
>>>>    pthread_mutexattr_settype(&mattr, mutex_type_attribute);
>>>> -  pthread_mutexattr_setprotocol(&mattr, PTHREAD_PRIO_INHERIT);
>>>>    pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_PRIVATE);
>>>>    ret = __bt(-__RT(pthread_mutex_init(&p->lock, &mattr)));
>>>>    pthread_mutexattr_destroy(&mattr);
>>>>
>>>
>>> This one raises an interesting issue: since commit #8e606e681,
>>> registry_{add, destroy}_file() use plain malloc(), therefore are subject
>>> to mode switches, dropping the real-time guarantee from object
>>> creation/deletion routines such as rt_*_{create, delete}() calls from
>>> the Alchemy API.
>>>
>>> Previously to such change, some of these routines did not provide such
>>> guarantee anyway, e.g. rt_task_create(), but others did like
>>> rt_mutex_create(), rt_cond_create().
>>>
>>> I'm now questioning those specific changes in registry_{add,
>>> destroy}_file(), because they might break applications assuming that rt
>>> mode is not lost when calling them, which is still true if the registry
>>> is disabled, leading to a fairly confusing inconsistency.
>>>
>>> Merging your patch would enforce this change in behavior even more,
>>> carving in stone that all object creation and deletion routines which
>>> interface with the registry won't be rt-capable anymore.
>>
>> Sure, we need to sort out the rt_*_create topic prior to being able to
>> decide about this one.
>>
>>>
>>> Would that be generally acceptable?
>>
>> I would not expect a lot use cases to be affected by that. The bare
>> minimum would be documenting this in the 2->3 migration guide.
>>
>> OTOH, given that this is the stable series, such a change (8e606e681)
>> may better wait for 3.1.
>>
> 
> This change should be reverted. The more I think of it, the more I see
> no reason to restrict object creation/deletion to secondary mode if the
> actual implementation does not require this.
> 

In fact, pv* calls there should simply move to xn* counterparts, fixing
the issue without any change in behavior.

-- 
Philippe.

_______________________________________________
Xenomai mailing list
Xenomai@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai

Reply via email to