httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From c...@apache.org
Subject cvs commit: httpd-2.0/modules/experimental mod_mem_cache.c
Date Wed, 07 Jan 2004 19:35:16 GMT
clar        2004/01/07 11:35:16

  Modified:    modules/experimental mod_mem_cache.c
  Log:
  Fix for  Bug 21287.
  Patch extracted and modified from attachment in Bug 21285.
  The submitted patch was combining fix for 21285 and 21287.
  It is extending the mutex protection in decrement_refcount() and remove_url().
  
  Revision  Changes    Path
  1.103     +9 -26     httpd-2.0/modules/experimental/mod_mem_cache.c
  
  Index: mod_mem_cache.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/experimental/mod_mem_cache.c,v
  retrieving revision 1.102
  retrieving revision 1.103
  diff -u -r1.102 -r1.103
  --- mod_mem_cache.c	6 Jan 2004 21:57:50 -0000	1.102
  +++ mod_mem_cache.c	7 Jan 2004 19:35:16 -0000	1.103
  @@ -348,33 +348,26 @@
               cache_remove(sconf->cache_cache, obj);
               obj->cleanup = 1;
           }
  -        if (sconf->lock) {
  -            apr_thread_mutex_unlock(sconf->lock);
  -        }
  +    }
  +    else if (sconf->lock) {
  +        apr_thread_mutex_lock(sconf->lock);
       }
   
       /* Cleanup the cache object */
   #ifdef USE_ATOMICS
  -    if (!apr_atomic_dec32(&obj->refcount)) {
  -        if (obj->cleanup) {
  -            cleanup_cache_object(obj);
  -        }
  -    }
  +    if (!apr_atomic_dec32(&obj->refcount) && (obj->cleanup)) {
   #else
  -    if (sconf->lock) {
  -        apr_thread_mutex_lock(sconf->lock);
  -    }
       obj->refcount--;
       /* If the object is marked for cleanup and the refcount
        * has dropped to zero, cleanup the object
        */
       if ((obj->cleanup) && (!obj->refcount)) {
  +#endif
           cleanup_cache_object(obj);
       }
       if (sconf->lock) {
           apr_thread_mutex_unlock(sconf->lock);
       }
  -#endif
       return APR_SUCCESS;
   }
   static apr_status_t cleanup_cache_mem(void *sconfv)
  @@ -739,35 +732,25 @@
     
       obj = cache_find(sconf->cache_cache, key);       
       if (obj) {
  -        mem_cache_object_t *mobj;
           cache_remove(sconf->cache_cache, obj);
  -        mobj = (mem_cache_object_t *) obj->vobj;
   
   #ifdef USE_ATOMICS
           /* Refcount increment in this case MUST be made under 
            * protection of the lock 
            */
           apr_atomic_inc32(&obj->refcount);
  +        obj->cleanup = 1;
  +        if (!apr_atomic_dec32(&obj->refcount)) {
   #else
  +        obj->cleanup = 1;
           if (!obj->refcount) {
  -            cleanup_cache_object(obj);
  -            obj = NULL;
  -        }
   #endif
  -        if (obj) {
  -            obj->cleanup = 1;
  +            cleanup_cache_object(obj);
           }
       }
       if (sconf->lock) {
           apr_thread_mutex_unlock(sconf->lock);
       }
  -#ifdef USE_ATOMICS
  -    if (obj) {
  -        if (!apr_atomic_dec32(&obj->refcount)) {
  -            cleanup_cache_object(obj);
  -        }
  -    }
  -#endif
       return OK;
   }
   
  
  
  

Mime
View raw message