[GSoC]deal with the critical region in POSIX Key

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Jul 3 18:42:40 UTC 2012


On 03/07/12 12:06, Ashi wrote:
> 2012/7/2 Joel Sherrill<joel.sherrill at oarcorp.com>
>
>> POSIX has no requirements that the pthread key operations be safe to call
>> from an ISR so you are primarily concerned about
>>
>> + memory allocation protection, if there is any
>> + dispatch disable, preventing other threads from running
>>
>> The methods which use _XXX_Get to turn an id into a pointer implicitly
>> disable dispatching. So this part should be ok
>>
>>
> Sorry, dump question... Joel, do you mean what I need to do is just mimic
> the current implementation:do thread disable dispatch as the current
> implementation?
>
> I also have some questions on current implementation's critical region
> proccessing:
> - Since key is only used after creation,  there is only one thread can
> access key before key creation finish, then there is no race condition in
> key create. Why there still is thread dispatch disable when key creates?

You have to make sure that resources are not left over in case someone 
deletes the thread.

> - When key getspecific in one-rbtree implementation, the only operation
> which relates to critical region(the rbtree) is _RBTree_Find[0], and
> _RBTree_Find is ISR disabled. Then can we enable thread dispatch just after
> _POSIX_Keys_Get()?

In case task/ISR synchronization is not necessary, then a ISR disable 
during the find operation is not appropriate.  You should use the 
unprotected version.

> - I also find in current implementation, when pthread_getspecific failes,
> it returns NULL, but it didn't re-enable thread dispatch, what's the reason
> behind it?

Please have a look at _Objects_Get().

> links:
> [0] My current implementation:
> https://github.com/ashi08104/rtems/blob/one_rbtree/cpukit/posix/src/keygetspecific.c
[...]

-- 
Sebastian Huber, embedded brains GmbH

Address : Obere Lagerstr. 30, D-82178 Puchheim, Germany
Phone   : +49 89 18 90 80 79-6
Fax     : +49 89 18 90 80 79-9
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.




More information about the devel mailing list