The proper logic to add to a cache is wrlock
test if exists again add element unlock because there is a race condition in the logic below rdlock test if the element exists >> race is here, prior to wrlocking, another thread may wrlock->insert promote to wrlock insert unlock At 06:07 PM 6/10/2004, Brad Nicholes wrote: > It appears to me that if it doesn't handle low memory situations or >it is giving false positives, those are separate issues from pools vs. >calloc/free. I still think we need to implement some better monitoring >or logging code in the cache_mgr and enhance the cache-status pages so >that we can track things like false positives. Maybe tracking the >entries by user name and authentication state rather than just the >number entries and how often the cache was hit. > > Maybe the real problem is with the locking. In fact just taking a >quick scan through the code again, I am seeing something that bothers me >in util_ldap_cache_comparedn() > > if (curl) { > /* compare successful - add to the compare cache */ > LDAP_CACHE_RDLOCK(); > newnode.reqdn = (char *)reqdn; > newnode.dn = (char *)dn; > util_ald_cache_insert(curl->dn_compare_cache, &newnode); > LDAP_CACHE_UNLOCK(); > } > >It appears to be acquiring a read lock but then inserts a new node into >the cache. Shouldn't it be acquiring a write lock before doing an >insert? > > >Brad > > >Brad Nicholes >Senior Software Engineer >Novell, Inc., the leading provider of Net business solutions >http://www.novell.com > >>>> Graham Leggett <[EMAIL PROTECTED]> Thursday, June 10, 2004 4:24:54 >PM >>> >Brad Nicholes wrote: > >> Do we even know that there is a problem with this code? I haven't >seen >> any memory leaks so far. I would hate to go to all of the work to >> redesign and rewrite the ldap_cache manager for little to no gain. > >It does not seem to handle the "we ran out of memory while trying to >add >to the cache" case very gracefully. It doesn't crash any more, but I'm > >experiencing false negatives still, which is the problem I was trying >to >fix when I started trying to fix the code. > >Regards, >Graham >--