> On Mon, 2 Jul 2001, Sander Striker wrote:
>
> > apr_sms_thread_register(sms, os_thread)
> > {
>
> [snip]
>
> > pms = sms->parent;
> > while (pms) {
> > apr_sms_thread_register(os_thread);
> > pms = pms->parent;
> > }
>
> [snip]
>
> > }
>
> You don't need a while loop here... the recursion ought to take care of it
> for you.
Ah, indeed. Good it was only pseudo code :)
Actually it should be unrolled in the while loop.
Recursion only slows us down :)
So it would become something like this:
apr_sms_thread_register(sms, os_thread)
{
do {
if (!sms->lock) {
sms->lock = apr_lock_create();
}
apr_lock_acquire(sms->lock);
sms->thread_count++;
/* let the sms know about the thread if it is
* interested (so it can protect its private
* data with its own lock)
*/
if (sms->thread_register_fn)
sms->thread_register_fn(os_thread);
apr_lock_release(sms->lock);
sms = sms->parent;
} while (sms);
}
Sander