Makes sense to me.  +1 for removing it.

Ryan

On Sun, 29 Apr 2001, Doug MacEachern wrote:

> On Sun, 29 Apr 2001 [EMAIL PROTECTED] wrote:
>
> > On Sun, 29 Apr 2001, Doug MacEachern wrote:
> >
> > > wait a sec, i am blind.  apr_threadkey_private_{get,set} does what i
> > > expected.  its apr_threadkey_data_{get,set} that uses
> > > apr_pool_userdata_{get,set}.  this part of the api should probably be
> > > removed.
> >
> > Why would you remove that part of the API?  It is just as useful or
> > useless as the rest of the userdata_{get,set} functions, isn't it?  Maybe
> > not, because threadkey's are basically the same thing.  Whatever, no real
> > opinion here.
>
> apr_pool_userdata_{get,set} is very useful.
> apr_threadkey_private_{get,set} is very useful.
> the trouble here is when pool userdata is mixed with tls.
> as i said, you risk multiple threads writing to the same pool with no
> locking.
>
> look again at my example:
>
> static apr_threadkey_t *thr_key;
>
> static void hook_post_config(apr_pool_t *pconf, ...)
> {
>      apr_threadkey_private_create(&thr_key, NULL, pconf);
> }
>
> now elsewhere at request time we have:
>
> int foo_handler(request_rec *r)
> {
>     ...
>     apr_threadkey_data_set(&foo, "bar", thr_key);
>     ...
> }
>
> underneath calls:
> apr_pool_userdata_get(data, key, threadkey->cntxt);
>                                  ^^^^^^^^^^^^^^^^
> multiple threads cannot be writing to this pool at the same time.
>
>


_______________________________________________________________________________
Ryan Bloom                              [EMAIL PROTECTED]
406 29th St.
San Francisco, CA 94131
-------------------------------------------------------------------------------

Reply via email to