Doesn't the race condition still exist?   For example, I can delete the
object after the if but before the hash_set.  You need a mutex, don't
you?

Ryan

>   -    apr_hash_set(sconf->cacheht, obj->key, strlen(obj->key), NULL);
>   +    /*
>   +     * RACE .. some one might have just deleted this object .. so
test
>   +     * if it is still around
>   +     */
>   +    if (obj) {
>   +        apr_hash_set(sconf->cacheht, obj->key, strlen(obj->key),
NULL);
>   +        cleanup_cache_object(obj);
>   +        h->cache_obj = NULL;
>   +    }
>        if (sconf->lock) {
>            apr_thread_mutex_unlock(sconf->lock);
>   -    }
>   -
>   -    cleanup_cache_object(obj);
>   +    }
> 
>        return OK;
>    }
> 
> 
> 

Reply via email to