andrei          Wed Aug 25 16:47:41 2004 EDT

  Modified files:              (Branch: PHP_4_3)
    /php-src/ext/pcre   php_pcre.c 
  Log:
  Rewrite cache clean-up using zend_hash_apply_with_argument().
  
  
http://cvs.php.net/diff.php/php-src/ext/pcre/php_pcre.c?r1=1.132.2.20&r2=1.132.2.21&ty=u
Index: php-src/ext/pcre/php_pcre.c
diff -u php-src/ext/pcre/php_pcre.c:1.132.2.20 php-src/ext/pcre/php_pcre.c:1.132.2.21
--- php-src/ext/pcre/php_pcre.c:1.132.2.20      Wed Aug 25 00:42:54 2004
+++ php-src/ext/pcre/php_pcre.c Wed Aug 25 16:47:40 2004
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_pcre.c,v 1.132.2.20 2004/08/25 04:42:54 pollita Exp $ */
+/* $Id: php_pcre.c,v 1.132.2.21 2004/08/25 20:47:40 andrei Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -111,57 +111,16 @@
 #define PCRE_CACHE_SIZE 4096
 
 /* {{{ static pcre_clean_cache */
-static void pcre_clean_cache(TSRMLS_D)
+static int pcre_clean_cache(void *data, void *arg TSRMLS_DC)
 {
-       HashTable *ht = &PCRE_G(pcre_cache);
-       Bucket *p = NULL;
-       int clean_size = PCRE_CACHE_SIZE / 8;
+       int *num_clean = (int *)arg;
 
-       HANDLE_BLOCK_INTERRUPTIONS();
-
-       do {
-               p = ht->pListHead;
-
-               if (ht->pDestructor) {
-                       ht->pDestructor(p->pData);
-               }
-               if (!p->pDataPtr) {
-                       pefree(p->pData, ht->persistent);
-               }
-
-               if (p->pLast) {
-                       p->pLast->pNext = p->pNext;
-               } else {
-                       uint nIndex;
-
-                       nIndex = p->h & ht->nTableMask;
-                       ht->arBuckets[nIndex] = p->pNext;
-               }
-               if (p->pNext) {
-                       p->pNext->pLast = p->pLast;
-               } else {
-                       /* Nothing to do as this list doesn't have a tail */
-               }
-
-               if (p->pListLast != NULL) {
-                       p->pListLast->pListNext = p->pListNext;
-               } else {
-                       /* Deleting the head of the list */
-                       ht->pListHead = p->pListNext;
-               }
-               if (p->pListNext != NULL) {
-                       p->pListNext->pListLast = p->pListLast;
-               } else {
-                       ht->pListTail = p->pListLast;
-               }
-               if (ht->pInternalPointer == p) {
-                       ht->pInternalPointer = p->pListNext;
-               }
-               pefree(p, ht->persistent);
-               ht->nNumOfElements--;
-       } while (ht->nNumOfElements > PCRE_CACHE_SIZE - clean_size);
-
-       HANDLE_UNBLOCK_INTERRUPTIONS();
+       if (*num_clean > 0) {
+               (*num_clean)--;
+               return 1;
+       } else {
+               return 0;
+       }
 }
 /* }}} */
 
@@ -342,7 +301,8 @@
         * ones).
         */
        if (zend_hash_num_elements(&PCRE_G(pcre_cache)) == PCRE_CACHE_SIZE) {
-               pcre_clean_cache(TSRMLS_C);
+               int num_clean = PCRE_CACHE_SIZE / 8;
+               zend_hash_apply_with_argument(&PCRE_G(pcre_cache), pcre_clean_cache, 
&num_clean TSRMLS_CC);
        }
 
        /* Store the compiled pattern and extra info in the cache. */

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to