]> granicus.if.org Git - php/commitdiff
Remove dead code and add possibility to fine tune the size of
authorAndrey Hristov <andrey@php.net>
Thu, 22 Apr 2010 15:07:40 +0000 (15:07 +0000)
committerAndrey Hristov <andrey@php.net>
Thu, 22 Apr 2010 15:07:40 +0000 (15:07 +0000)
a mempool (used for result sets).

ext/mysqlnd/mysqlnd.h
ext/mysqlnd/mysqlnd_block_alloc.c
ext/mysqlnd/mysqlnd_ps.c
ext/mysqlnd/mysqlnd_result.c
ext/mysqlnd/mysqlnd_structs.h
ext/mysqlnd/php_mysqlnd.c

index 8f30ab5d99c91ec0c542113a5ff8aec04a3f70e0..0c076f7f8462820ba356c06051fa6e327474729e 100644 (file)
@@ -277,6 +277,7 @@ ZEND_BEGIN_MODULE_GLOBALS(mysqlnd)
        long                    net_read_buffer_size;
        long                    log_mask;
        long                    net_read_timeout;
+       long                    mempool_default_size;
 ZEND_END_MODULE_GLOBALS(mysqlnd)
 
 ZEND_EXTERN_MODULE_GLOBALS(mysqlnd);
index e93f9d3cd29bb99c7c84745d02029b098ed104b6..41c3af6f06b7649648109b20f2bd62ba98f1cf6c 100644 (file)
 #include "mysqlnd_priv.h"
 
 
-/* {{{ mysqlnd_mempool_free_chunk */
-static void
-mysqlnd_mempool_free_contents(MYSQLND_MEMORY_POOL * pool TSRMLS_DC)
-{
-       unsigned int i;
-       DBG_ENTER("mysqlnd_mempool_dtor");
-       for (i = 0; i < pool->free_chunk_list_elements; i++) {
-               MYSQLND_MEMORY_POOL_CHUNK * chunk = pool->free_chunk_list[i];
-               chunk->free_chunk(chunk, FALSE TSRMLS_CC);
-       }
-       
-       DBG_VOID_RETURN;
-}
-/* }}} */
-
-
 /* {{{ mysqlnd_mempool_free_chunk */
 static void
 mysqlnd_mempool_free_chunk(MYSQLND_MEMORY_POOL_CHUNK * chunk, zend_bool cache_it TSRMLS_DC)
@@ -62,13 +46,7 @@ mysqlnd_mempool_free_chunk(MYSQLND_MEMORY_POOL_CHUNK * chunk, zend_bool cache_it
        } else {
                mnd_free(chunk->ptr);
        }
-       if (cache_it && pool->free_chunk_list_elements < MYSQLND_MEMORY_POOL_CHUNK_LIST_SIZE) {
-               chunk->ptr = NULL;
-               pool->free_chunk_list[pool->free_chunk_list_elements++] = chunk;
-       } else {
-               /* We did not cache it -> free it */
-               mnd_free(chunk);
-       }
+       mnd_free(chunk);
        DBG_VOID_RETURN;
 }
 /* }}} */
@@ -110,7 +88,7 @@ mysqlnd_mempool_resize_chunk(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int siz
                                memcpy(new_ptr, chunk->ptr, chunk->size);
                                chunk->ptr = new_ptr;
                                chunk->size = size;
-                               chunk->pool = NULL; /* now we have no pool memory */
+                               chunk->pool = NULL; /* now we have non-pool memory */
                                pool->refcount--;
                        }
                }
@@ -129,11 +107,7 @@ MYSQLND_MEMORY_POOL_CHUNK * mysqlnd_mempool_get_chunk(MYSQLND_MEMORY_POOL * pool
        MYSQLND_MEMORY_POOL_CHUNK *chunk = NULL;
        DBG_ENTER("mysqlnd_mempool_get_chunk");
 
-       if (pool->free_chunk_list_elements) {
-               chunk = pool->free_chunk_list[--pool->free_chunk_list_elements];
-       } else {
-               chunk = mnd_malloc(sizeof(MYSQLND_MEMORY_POOL_CHUNK));
-       }
+       chunk = mnd_malloc(sizeof(MYSQLND_MEMORY_POOL_CHUNK));
 
        chunk->free_chunk = mysqlnd_mempool_free_chunk;
        chunk->resize_chunk = mysqlnd_mempool_resize_chunk;
@@ -167,7 +141,7 @@ mysqlnd_mempool_create(size_t arena_size TSRMLS_DC)
        MYSQLND_MEMORY_POOL * ret = mnd_calloc(1, sizeof(MYSQLND_MEMORY_POOL));
        DBG_ENTER("mysqlnd_mempool_create");
 
-       ret->free_size = ret->arena_size = arena_size;
+       ret->free_size = ret->arena_size = arena_size ? arena_size : 0;
        ret->refcount = 0;
        /* OOM ? */
        ret->arena = mnd_malloc(ret->arena_size);
@@ -184,7 +158,6 @@ mysqlnd_mempool_destroy(MYSQLND_MEMORY_POOL * pool TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_mempool_destroy");
        /* mnd_free will reference LOCK_access and might crash, depending on the caller...*/
-       mysqlnd_mempool_free_contents(pool TSRMLS_CC);
        mnd_free(pool->arena);
        mnd_free(pool);
        DBG_VOID_RETURN;
index fd3d7d37fb41a7559bb9a15b1302c6ff66d53001..156cb51475d1ffd3d99a51f816e6f6ac12999028 100644 (file)
@@ -102,7 +102,7 @@ MYSQLND_METHOD(mysqlnd_stmt, store_result)(MYSQLND_STMT * const s TSRMLS_DC)
        result->m.fetch_row             = mysqlnd_fetch_stmt_row_buffered;
        result->m.fetch_lengths = NULL;/* makes no sense */
 
-       result->result_set_memory_pool = mysqlnd_mempool_create(16000 TSRMLS_CC);
+       result->result_set_memory_pool = mysqlnd_mempool_create(MYSQLND_G(mempool_default_size) TSRMLS_CC);
 
        ret = result->m.store_result_fetch_data(conn, result, result->meta, TRUE, to_cache TSRMLS_CC);
 
index 99838035ddc0a99a05d7bb417064d096810e9468..a1b609f97aa249c358e613f4f9b15913c31526ad 100644 (file)
@@ -856,7 +856,7 @@ MYSQLND_METHOD(mysqlnd_res, use_result)(MYSQLND_RES * const result, zend_bool ps
        }
        result->unbuf = mnd_ecalloc(1, sizeof(MYSQLND_RES_UNBUFFERED));
 
-       result->result_set_memory_pool = mysqlnd_mempool_create(16000 TSRMLS_CC);
+       result->result_set_memory_pool = mysqlnd_mempool_create(MYSQLND_G(mempool_default_size) TSRMLS_CC);
 
        /*
          Will be freed in the mysqlnd_internal_free_result_contents() called
@@ -1171,7 +1171,7 @@ MYSQLND_METHOD(mysqlnd_res, store_result)(MYSQLND_RES * result,
 
        CONN_SET_STATE(conn, CONN_FETCHING_DATA);
 
-       result->result_set_memory_pool = mysqlnd_mempool_create(16000 TSRMLS_CC);
+       result->result_set_memory_pool = mysqlnd_mempool_create(MYSQLND_G(mempool_default_size) TSRMLS_CC);
        result->lengths = mnd_ecalloc(result->field_count, sizeof(unsigned long));
 
        ret = result->m.store_result_fetch_data(conn, result, result->meta, ps_protocol, to_cache TSRMLS_CC);
index 7e9e180a0d546e971e687cb8745ed84cc472a31e..83b80cc43db51e4549c3c83656433cbafad194f9 100644 (file)
@@ -39,9 +39,6 @@ struct st_mysqlnd_memory_pool
        unsigned int arena_size;
        unsigned int free_size;
 
-       MYSQLND_MEMORY_POOL_CHUNK* free_chunk_list[MYSQLND_MEMORY_POOL_CHUNK_LIST_SIZE];
-       unsigned int free_chunk_list_elements;
-
        MYSQLND_MEMORY_POOL_CHUNK*      (*get_chunk)(MYSQLND_MEMORY_POOL * pool, unsigned int size TSRMLS_DC);
 };
 
index 8b3f5b9dfe8b159045506907a269bb8e2736b244..fdc73e97f8b1d5f32afc5f8ca5c87792cdede148 100644 (file)
@@ -176,6 +176,7 @@ PHP_INI_BEGIN()
        STD_PHP_INI_ENTRY("mysqlnd.net_read_buffer_size",       "32768",PHP_INI_ALL,    OnUpdateLong,   net_read_buffer_size,   zend_mysqlnd_globals,           mysqlnd_globals)
        STD_PHP_INI_ENTRY("mysqlnd.net_read_timeout",   "31536000",     PHP_INI_SYSTEM, OnUpdateLong,   net_read_timeout, zend_mysqlnd_globals, mysqlnd_globals)
        STD_PHP_INI_ENTRY("mysqlnd.log_mask",                           "0",    PHP_INI_ALL,    OnUpdateLong,   log_mask, zend_mysqlnd_globals, mysqlnd_globals)
+       STD_PHP_INI_ENTRY("mysqlnd.mempool_default_size","16000",   PHP_INI_ALL,        OnUpdateLong,   mempool_default_size,   zend_mysqlnd_globals,           mysqlnd_globals)
 PHP_INI_END()
 /* }}} */