<br><br><div class="gmail_quote">2012/7/4 Sebastian Huber <span dir="ltr"><<a href="mailto:sebastian.huber@embedded-brains.de" target="_blank">sebastian.huber@embedded-brains.de</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On 03/07/12 12:06, Ashi wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2012/7/2 Joel Sherrill<<a href="mailto:joel.sherrill@oarcorp.com" target="_blank">joel.sherrill@<u></u>oarcorp.com</a>><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
POSIX has no requirements that the pthread key operations be safe to call<br>
from an ISR so you are primarily concerned about<br>
<br>
+ memory allocation protection, if there is any<br>
+ dispatch disable, preventing other threads from running<br>
<br>
The methods which use _XXX_Get to turn an id into a pointer implicitly<br>
disable dispatching. So this part should be ok<br>
<br>
<br>
</blockquote>
Sorry, dump question... Joel, do you mean what I need to do is just mimic<br>
the current implementation:do thread disable dispatch as the current<br>
implementation?<br>
<br>
I also have some questions on current implementation's critical region<br>
proccessing:<br>
- Since key is only used after creation,  there is only one thread can<br>
access key before key creation finish, then there is no race condition in<br>
key create. Why there still is thread dispatch disable when key creates?<br>
</blockquote>
<br></div>
You have to make sure that resources are not left over in case someone deletes the thread. </blockquote><div>Sorry, it's my mistake that assume  there is only one thread can
access key before key creation finish. I find if thread dispatch is not disabled during key create and other thread is created before it, then there will be two thread can access key, the key is needed protection.<br></div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="im">
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
- When key getspecific in one-rbtree implementation, the only operation<br>
which relates to critical region(the rbtree) is _RBTree_Find[0], and<br>
_RBTree_Find is ISR disabled. Then can we enable thread dispatch just after<br>
_POSIX_Keys_Get()?<br>
</blockquote>
<br></div>
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.</blockquote><div class="im">I see. <br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
- I also find in current implementation, when pthread_getspecific failes,<br>
it returns NULL, but it didn't re-enable thread dispatch, what's the reason<br>
behind it?<br>
</blockquote>
<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Please have a look at _Objects_Get().<div class="im"><br></div></blockquote><div>Great, I know the reason now:) <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div class="im">
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
links:<br>
[0] My current implementation:<br>
<a href="https://github.com/ashi08104/rtems/blob/one_rbtree/cpukit/posix/src/keygetspecific.c" target="_blank">https://github.com/ashi08104/<u></u>rtems/blob/one_rbtree/cpukit/<u></u>posix/src/keygetspecific.c</a><br>
</blockquote></div>
[...]<div class="HOEnZb"><div class="h5"><br>
<br>
-- <br>
Sebastian Huber, embedded brains GmbH<br>
<br>
Address : Obere Lagerstr. 30, D-82178 Puchheim, Germany<br>
Phone   : <a href="tel:%2B49%2089%2018%2090%2080%2079-6" value="+4989189080796" target="_blank">+49 89 18 90 80 79-6</a><br>
Fax     : <a href="tel:%2B49%2089%2018%2090%2080%2079-9" value="+4989189080799" target="_blank">+49 89 18 90 80 79-9</a><br>
E-Mail  : <a href="mailto:sebastian.huber@embedded-brains.de" target="_blank">sebastian.huber@embedded-<u></u>brains.de</a><br>
PGP     : Public key available on request.<br>
<br>
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.<br>
<br>
______________________________<u></u>_________________<br>
rtems-devel mailing list<br>
<a href="mailto:rtems-devel@rtems.org" target="_blank">rtems-devel@rtems.org</a><br>
<a href="http://www.rtems.org/mailman/listinfo/rtems-devel" target="_blank">http://www.rtems.org/mailman/<u></u>listinfo/rtems-devel</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Best wishes!<br>Zhongwei Yao<br><br>