On Fri, Feb 07, 2014 at 10:24:45AM +0900, YAMAMOTO Takashi wrote:
> > On Wed, Feb 05, 2014 at 11:47:17AM +0900, YAMAMOTO Takashi wrote:
> >> > On Wed, Jan 15, 2014 at 12:41:20PM +0900, YAMAMOTO Takashi wrote:
> >> >> Add a comment about implicit synchronization which
> >> >> fat-rwlock seems to rely on.
> >> >> 
> >> >> Signed-off-by: YAMAMOTO Takashi <yamam...@valinux.co.jp>
> >> >> ---
> >> >>  lib/ovs-thread.h | 8 ++++++++
> >> >>  1 file changed, 8 insertions(+)
> >> >> 
> >> >> diff --git a/lib/ovs-thread.h b/lib/ovs-thread.h
> >> >> index 8cf2ecc..dab7510 100644
> >> >> --- a/lib/ovs-thread.h
> >> >> +++ b/lib/ovs-thread.h
> >> >> @@ -447,6 +447,14 @@ void xpthread_join(pthread_t, void **);
> >> >>   * Compared to pthread_key_t, ovsthread_key_t has the follow 
> >> >> limitations:
> >> >>   *
> >> >>   *    - Destructors must not access thread-specific data (via 
> >> >> ovsthread_key).
> >> >> + *
> >> >> + * Unlike pthread_key_t, this API implicitly serializes key removal
> >> >> + * (ovsthread_key_delete) and thread exit. (destructor)
> >> >> + * I.e.
> >> >> + *    - ovsthread_key_delete ensures the completion of destructors for
> >> >> + *      the key.
> >> >> + *    - Once ovsthread_key_delete completed, no destructors for the key
> >> >> + *      will be executed on thread exit.
> >> >>   */
> >> >>  typedef struct ovsthread_key *ovsthread_key_t;
> >> > 
> >> > I think I understand what you are saying, but I think that I would
> >> > phrase it differently.  Does the following express what you mean?
> >> > 
> >> > diff --git a/lib/ovs-thread.c b/lib/ovs-thread.c
> >> > index a20b2fd..18e524e 100644
> >> > --- a/lib/ovs-thread.c
> >> > +++ b/lib/ovs-thread.c
> >> > @@ -592,7 +592,8 @@ ovsthread_key_create(ovsthread_key_t *keyp, void 
> >> > (*destructor)(void *))
> >> >  }
> >> >  
> >> >  /* Frees 'key'.  The destructor supplied to ovsthread_key_create(), if 
> >> > any, is
> >> > - * not called.
> >> > + * not called.  This function returns only after any running 
> >> > destructors for
> >> > + * 'key' complete execution.
> >> 
> >> 'running destructors' is not exact.
> >> i believe pthread api allows for concurrent exiting threads to
> >> start executing the destructor after pthread_key_delete completed.
> >> but this ovsthread one doesn't.  and fat-rwlock relies on it.
> >> 
> >> i think it's better to say the difference explicitly as
> >> it guarantees more than pthread while using similar-looking names.
> >> i was confused when reading fat-rwlock.
> > 
> > Do you like the following version?
> 
> looks good to me.  thanks.
> 
> YAMAMOTO Takashi

Thanks, applied.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to