<div dir="ltr">Sure, I'll update this patch shortly.<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Jul 26, 2013 at 9:01 PM, Gedare Bloom <span dir="ltr"><<a href="mailto:gedare@rtems.org" target="_blank">gedare@rtems.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Now that the free list is committed, can you recreate these patches for review?<br>
<div class="HOEnZb"><div class="h5"><br>
On Sat, Jul 6, 2013 at 3:17 AM, Ashi <<a href="mailto:ashi08104@gmail.com">ashi08104@gmail.com</a>> wrote:<br>
> Hi all, this patch includes a reimplement of POSIX Key manager and compared<br>
> with first version of this patch, some improvement is added.<br>
><br>
> *In short*:<br>
> it enable unlimited model in POSIX key manger and have a decent runtime on<br>
> POSIX key searching, adding and deleting operations. Memory overhead is<br>
> lower than current implementation when the size of key and key value becomes<br>
> big.<br>
><br>
> *Some details*:<br>
> Current POSIX Key manager uses an array to manage POSIX Key value, so it<br>
> can't support POSIX Key unlimited mode. This implementation uses a red-black<br>
> tree(rbtree) to manage Key value. Because rbtree is a dynamic data<br>
> structure, it makes the key manager can support unlimited mode. And the<br>
> runtime of add, delete and search operation is log(n) for rbtree is a kind<br>
> of balance tree.<br>
><br>
> There is only one rbtree in system. This rbtree contains all key values.<br>
> Each node is like:<br>
><br>
> typedef struct {<br>
>   Chain_Node ch_node;<br>
>   RBTree_Node rb_node;<br>
>   pthread_key_t key;<br>
>   Objects_Id thread_id;<br>
>   void *value;<br>
>  }  POSIX_Keys_Rbtree_node;<br>
><br>
> Here, both pthread_key_t key and thread_id are used as rbtree's key.<br>
> RBTree_Node rb_node is necessary for being a rbtree node. Void *value points<br>
> to POSIX Key's value. There is also a ch_node, which is include in every<br>
> thread's key chain. It is used  to keep track of every POSIX thread's key<br>
> value. When thread exits, all key value can be deleted by iterating that<br>
> thread's key chain.<br>
><br>
> Because it is inefficient that allocating one node each time when new node<br>
> is added under unlimited mode, we employ a freelist structure to be a pool<br>
> of POSIX_Keys_Rbtree_node. The pool's size is initialized to the size<br>
> specified by rtems_resource_unlimited() macro(refer test case psxkey07 for<br>
> concrete example). When pool is empty, freelist structure will expand its<br>
> pool automatically with a size same as initial size.<br>
><br>
><br>
> Thanks,<br>
> Zhongwei<br>
><br>
</div></div></blockquote></div><br></div>