andrey          Tue Jun 16 09:15:38 2009 UTC

  Modified files:              (Branch: PHP_5_3)
    /php-src/ext/mysqlnd        mysqlnd_block_alloc.c mysqlnd_block_alloc.h 
                                mysqlnd_ps.c mysqlnd_result.c 
                                mysqlnd_structs.h mysqlnd_wireprotocol.c 
  Log:
  MFH:
  Hardwire function call instead of using callbacks. We don't actually need
  callbacks, it was done for making 2 functions static, not to pollute the
  global functions space but that had its price of 8 bytes overheat per
  allocation, which is just too much. Also making the app member 32b instead
  of 64b, which should save additional 4 byte, to the total of 12 byte per
  allocation of a row buffer.
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_block_alloc.c?r1=1.1.2.6&r2=1.1.2.7&diff_format=u
Index: php-src/ext/mysqlnd/mysqlnd_block_alloc.c
diff -u php-src/ext/mysqlnd/mysqlnd_block_alloc.c:1.1.2.6 
php-src/ext/mysqlnd/mysqlnd_block_alloc.c:1.1.2.7
--- php-src/ext/mysqlnd/mysqlnd_block_alloc.c:1.1.2.6   Thu Jun 11 08:52:06 2009
+++ php-src/ext/mysqlnd/mysqlnd_block_alloc.c   Tue Jun 16 09:15:38 2009
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_block_alloc.c,v 1.1.2.6 2009/06/11 08:52:06 andrey Exp $ */
+/* $Id: mysqlnd_block_alloc.c,v 1.1.2.7 2009/06/16 09:15:38 andrey Exp $ */
 
 #include "php.h"
 #include "mysqlnd.h"
@@ -35,7 +35,7 @@
        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);
+               mysqlnd_mempool_free_chunk(chunk, FALSE TSRMLS_CC);
        }
        
        DBG_VOID_RETURN;
@@ -44,11 +44,14 @@
 
 
 /* {{{ mysqlnd_mempool_free_chunk */
-static void
+void
 mysqlnd_mempool_free_chunk(MYSQLND_MEMORY_POOL_CHUNK * chunk, zend_bool 
cache_it TSRMLS_DC)
 {
        MYSQLND_MEMORY_POOL * pool = chunk->pool;
        DBG_ENTER("mysqlnd_mempool_free_chunk");
+       if (!chunk) {
+               DBG_VOID_RETURN;
+       }
        if (chunk->from_pool) {
                /* Try to back-off and guess if this is the last block 
allocated */
                if (chunk->ptr == (pool->arena + (pool->arena_size - 
pool->free_size - chunk->size))) {
@@ -60,14 +63,14 @@
                }
                pool->refcount--;
        } else {
-               mnd_free(chunk->ptr);
+               mnd_efree(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_efree(chunk);
        }
        DBG_VOID_RETURN;
 }
@@ -75,7 +78,7 @@
 
 
 /* {{{ mysqlnd_mempool_resize_chunk */
-static void
+void
 mysqlnd_mempool_resize_chunk(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int 
size TSRMLS_DC)
 {
        DBG_ENTER("mysqlnd_mempool_resize_chunk");
@@ -132,11 +135,9 @@
        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_emalloc(sizeof(MYSQLND_MEMORY_POOL_CHUNK));
        }
 
-       chunk->free_chunk = mysqlnd_mempool_free_chunk;
-       chunk->resize_chunk = mysqlnd_mempool_resize_chunk;
        chunk->size = size;
        /*
          Should not go over MYSQLND_MAX_PACKET_SIZE, since we
@@ -145,7 +146,7 @@
        */
        chunk->pool = pool;
        if (size > pool->free_size) {
-               chunk->ptr = mnd_malloc(size);
+               chunk->ptr = mnd_emalloc(size);
                chunk->from_pool = FALSE;
        } else {
                chunk->from_pool = TRUE;
@@ -164,13 +165,13 @@
 mysqlnd_mempool_create(size_t arena_size TSRMLS_DC)
 {
        /* We calloc, because we free(). We don't mnd_calloc()  for a reason. */
-       MYSQLND_MEMORY_POOL * ret = mnd_calloc(1, sizeof(MYSQLND_MEMORY_POOL));
+       MYSQLND_MEMORY_POOL * ret = mnd_ecalloc(1, sizeof(MYSQLND_MEMORY_POOL));
        DBG_ENTER("mysqlnd_mempool_create");
 
        ret->free_size = ret->arena_size = arena_size;
        ret->refcount = 0;
        /* OOM ? */
-       ret->arena = mnd_malloc(ret->arena_size);
+       ret->arena = mnd_emalloc(ret->arena_size);
        ret->get_chunk = mysqlnd_mempool_get_chunk;
 
        DBG_RETURN(ret);
@@ -186,8 +187,8 @@
        if (pool) {
                /* 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);
+               mnd_efree(pool->arena);
+               mnd_efree(pool);
        }
        DBG_VOID_RETURN;
 }
http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_block_alloc.h?r1=1.1.2.2&r2=1.1.2.3&diff_format=u
Index: php-src/ext/mysqlnd/mysqlnd_block_alloc.h
diff -u php-src/ext/mysqlnd/mysqlnd_block_alloc.h:1.1.2.2 
php-src/ext/mysqlnd/mysqlnd_block_alloc.h:1.1.2.3
--- php-src/ext/mysqlnd/mysqlnd_block_alloc.h:1.1.2.2   Wed Dec 31 11:15:39 2008
+++ php-src/ext/mysqlnd/mysqlnd_block_alloc.h   Tue Jun 16 09:15:38 2009
@@ -18,13 +18,16 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_block_alloc.h,v 1.1.2.2 2008/12/31 11:15:39 sebastian Exp $ */
+/* $Id: mysqlnd_block_alloc.h,v 1.1.2.3 2009/06/16 09:15:38 andrey Exp $ */
 
 #ifndef MYSQLND_BLOCK_ALLOC_H
 #define MYSQLND_BLOCK_ALLOC_H
 
 MYSQLND_MEMORY_POOL *  mysqlnd_mempool_create(size_t arena_size TSRMLS_DC);
 void                                   
mysqlnd_mempool_destroy(MYSQLND_MEMORY_POOL * pool TSRMLS_DC);
+void                                   
mysqlnd_mempool_resize_chunk(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int 
size TSRMLS_DC);
+void                                   
mysqlnd_mempool_free_chunk(MYSQLND_MEMORY_POOL_CHUNK * chunk, zend_bool 
cache_it TSRMLS_DC);
+
 
 #endif /* MYSQLND_BLOCK_ALLOC_H */
 
http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_ps.c?r1=1.3.2.27&r2=1.3.2.28&diff_format=u
Index: php-src/ext/mysqlnd/mysqlnd_ps.c
diff -u php-src/ext/mysqlnd/mysqlnd_ps.c:1.3.2.27 
php-src/ext/mysqlnd/mysqlnd_ps.c:1.3.2.28
--- php-src/ext/mysqlnd/mysqlnd_ps.c:1.3.2.27   Fri May 29 12:19:40 2009
+++ php-src/ext/mysqlnd/mysqlnd_ps.c    Tue Jun 16 09:15:38 2009
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_ps.c,v 1.3.2.27 2009/05/29 12:19:40 andrey Exp $ */
+/* $Id: mysqlnd_ps.c,v 1.3.2.28 2009/06/16 09:15:38 andrey Exp $ */
 #include "php.h"
 #include "mysqlnd.h"
 #include "mysqlnd_wireprotocol.h"
@@ -885,7 +885,7 @@
                          the bound variables. Thus we need to do part of what 
it does or Zend will
                          report leaks.
                        */
-                       
row_packet->row_buffer->free_chunk(row_packet->row_buffer, TRUE TSRMLS_CC);
+                       mysqlnd_mempool_free_chunk(row_packet->row_buffer, TRUE 
TSRMLS_CC);
                        row_packet->row_buffer = NULL;
                }
        } else if (ret == FAIL) {
@@ -1060,13 +1060,13 @@
                          the bound variables. Thus we need to do part of what 
it does or Zend will
                          report leaks.
                        */
-                       
row_packet->row_buffer->free_chunk(row_packet->row_buffer, TRUE TSRMLS_CC);
+                       mysqlnd_mempool_free_chunk(row_packet->row_buffer, TRUE 
TSRMLS_CC);
                        row_packet->row_buffer = NULL;
                }
                /* We asked for one row, the next one should be EOF, eat it */
                ret = PACKET_READ(row_packet, result->conn);
                if (row_packet->row_buffer) {
-                       
row_packet->row_buffer->free_chunk(row_packet->row_buffer, TRUE TSRMLS_CC);
+                       mysqlnd_mempool_free_chunk(row_packet->row_buffer, TRUE 
TSRMLS_CC);
                        row_packet->row_buffer = NULL;
                }
                MYSQLND_INC_CONN_STATISTIC(&stmt->conn->stats, 
STAT_ROWS_FETCHED_FROM_CLIENT_PS_CURSOR);
http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_result.c?r1=1.4.2.29&r2=1.4.2.30&diff_format=u
Index: php-src/ext/mysqlnd/mysqlnd_result.c
diff -u php-src/ext/mysqlnd/mysqlnd_result.c:1.4.2.29 
php-src/ext/mysqlnd/mysqlnd_result.c:1.4.2.30
--- php-src/ext/mysqlnd/mysqlnd_result.c:1.4.2.29       Thu May 28 17:47:37 2009
+++ php-src/ext/mysqlnd/mysqlnd_result.c        Tue Jun 16 09:15:38 2009
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_result.c,v 1.4.2.29 2009/05/28 17:47:37 andrey Exp $ */
+/* $Id: mysqlnd_result.c,v 1.4.2.30 2009/06/16 09:15:38 andrey Exp $ */
 #include "php.h"
 #include "mysqlnd.h"
 #include "mysqlnd_wireprotocol.h"
@@ -177,7 +177,7 @@
        if (unbuf->last_row_buffer) {
                DBG_INF("Freeing last row buffer");
                /* Nothing points to this buffer now, free it */
-               unbuf->last_row_buffer->free_chunk(unbuf->last_row_buffer, TRUE 
TSRMLS_CC);
+               mysqlnd_mempool_free_chunk(unbuf->last_row_buffer, TRUE 
TSRMLS_CC);
                unbuf->last_row_buffer = NULL;
        }
 
@@ -219,7 +219,7 @@
 #if MYSQLND_DEBUG_MEMORY
                DBG_INF("Freeing current_row & current_buffer");
 #endif
-               current_buffer->free_chunk(current_buffer, TRUE TSRMLS_CC);
+               mysqlnd_mempool_free_chunk(current_buffer, TRUE TSRMLS_CC);
        }
        DBG_INF("Freeing data & row_buffer");
        if (set->data) {
http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_structs.h?r1=1.2.2.19&r2=1.2.2.20&diff_format=u
Index: php-src/ext/mysqlnd/mysqlnd_structs.h
diff -u php-src/ext/mysqlnd/mysqlnd_structs.h:1.2.2.19 
php-src/ext/mysqlnd/mysqlnd_structs.h:1.2.2.20
--- php-src/ext/mysqlnd/mysqlnd_structs.h:1.2.2.19      Wed Dec 31 11:15:39 2008
+++ php-src/ext/mysqlnd/mysqlnd_structs.h       Tue Jun 16 09:15:38 2009
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: mysqlnd_structs.h,v 1.2.2.19 2008/12/31 11:15:39 sebastian Exp $ */
+/* $Id: mysqlnd_structs.h,v 1.2.2.20 2009/06/16 09:15:38 andrey Exp $ */
 
 #ifndef MYSQLND_STRUCTS_H
 #define MYSQLND_STRUCTS_H
@@ -45,12 +45,10 @@
 
 struct st_mysqlnd_memory_pool_chunk
 {
-       uint64_t                        app;
+       uint32_t                        app;
        MYSQLND_MEMORY_POOL *pool;
        zend_uchar                      *ptr;
-       unsigned int                            size;
-       void                            
(*resize_chunk)(MYSQLND_MEMORY_POOL_CHUNK * chunk, unsigned int size TSRMLS_DC);
-       void                            (*free_chunk)(MYSQLND_MEMORY_POOL_CHUNK 
* chunk, zend_bool cache_it TSRMLS_DC);
+       uint32_t                        size;
        zend_bool                       from_pool;
 };
 
http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_wireprotocol.c?r1=1.4.2.30&r2=1.4.2.31&diff_format=u
Index: php-src/ext/mysqlnd/mysqlnd_wireprotocol.c
diff -u php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.4.2.30 
php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.4.2.31
--- php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.4.2.30 Fri Jun 12 13:24:57 2009
+++ php-src/ext/mysqlnd/mysqlnd_wireprotocol.c  Tue Jun 16 09:15:38 2009
@@ -1326,7 +1326,7 @@
                          We need a trailing \0 for the last string, in case of 
text-mode,
                          to be able to implement read-only variables.
                        */
-                       (*buffer)->resize_chunk((*buffer), *data_size + 1 
TSRMLS_CC);
+                       mysqlnd_mempool_resize_chunk((*buffer), *data_size + 1 
TSRMLS_CC);
                        /* The position could have changed, recalculate */
                        p = (*buffer)->ptr + (*data_size - header.size);
                }
@@ -1343,7 +1343,7 @@
                }
        }
        if (ret == FAIL && (*buffer)) {
-               (*buffer)->free_chunk((*buffer), TRUE TSRMLS_CC);
+               mysqlnd_mempool_free_chunk(*buffer, TRUE TSRMLS_CC);
                *buffer = NULL;
        }
        *data_size -= prealloc_more_bytes;
@@ -1826,7 +1826,7 @@
        DBG_ENTER("php_mysqlnd_rowp_free_mem");
        p = (php_mysql_packet_row *) _packet;
        if (p->row_buffer) {
-               p->row_buffer->free_chunk(p->row_buffer, TRUE TSRMLS_CC);
+               mysqlnd_mempool_free_chunk(p->row_buffer, TRUE TSRMLS_CC);
                p->row_buffer = NULL;
        }
        DBG_INF_FMT("alloca=%d persistent=%d", (int)alloca, 
(int)p->header.persistent);

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

Reply via email to