cvs: ZendEngine2(PHP_5_3) / zend_gc.c zend_gc.h

From: Date: Fri, 11 Apr 2008 17:31:53 +0000
Subject: cvs: ZendEngine2(PHP_5_3) / zend_gc.c zend_gc.h
Groups: php.zend-engine.cvs 
Request: Send a blank email to php-zend-engine-cvs+get-6616@lists.php.net to get a copy of this message
dmitry Fri Apr 11 17:31:53 2008 UTC Modified files: (Branch: PHP_5_3) /ZendEngine2 zend_gc.c zend_gc.h Log: Speedup GC initialization http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_gc.c?r1=1.1.2.10&r2=1.1.2.11&diff_format=u Index: ZendEngine2/zend_gc.c diff -u ZendEngine2/zend_gc.c:1.1.2.10 ZendEngine2/zend_gc.c:1.1.2.11 --- ZendEngine2/zend_gc.c:1.1.2.10 Wed Mar 19 11:46:10 2008 +++ ZendEngine2/zend_gc.c Fri Apr 11 17:31:53 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_gc.c,v 1.1.2.10 2008/03/19 11:46:10 dmitry Exp $ */ +/* $Id: zend_gc.c,v 1.1.2.11 2008/04/11 17:31:53 dmitry Exp $ */ #include "zend.h" #include "zend_API.h" @@ -111,20 +111,18 @@ GC_G(zobj_marked_grey) = 0; #endif - if (GC_G(buf) && - (GC_G(roots).next != &GC_G(roots) || - GC_G(roots).prev != &GC_G(roots))) { - + if (GC_G(buf)) { GC_G(roots).next = &GC_G(roots); GC_G(roots).prev = &GC_G(roots); - GC_G(unused) = &GC_G(buf)[0]; - for (i = 0; i < GC_ROOT_BUFFER_MAX_ENTRIES-1; i++) { - GC_G(buf)[i].prev = &GC_G(buf)[i+1]; - } - GC_G(buf)[GC_ROOT_BUFFER_MAX_ENTRIES-1].prev = NULL; + GC_G(unused) = NULL; + GC_G(first_unused) = GC_G(buf); GC_G(zval_to_free) = NULL; + } else { + GC_G(unused) = NULL; + GC_G(first_unused) = NULL; + GC_G(last_unused) = NULL; } } @@ -132,6 +130,7 @@ { if (GC_G(buf) == NULL && GC_G(gc_enabled)) { GC_G(buf) = (gc_root_buffer*) malloc(sizeof(gc_root_buffer) * GC_ROOT_BUFFER_MAX_ENTRIES); + GC_G(last_unused) = &GC_G(buf)[GC_ROOT_BUFFER_MAX_ENTRIES]; gc_reset(TSRMLS_C); } } @@ -164,7 +163,12 @@ if (!GC_ZVAL_ADDRESS(zv)) { gc_root_buffer *newRoot = GC_G(unused); - if (!newRoot) { + if (newRoot) { + GC_G(unused) = newRoot->prev; + } else if (GC_G(first_unused) != GC_G(last_unused)) { + newRoot = GC_G(first_unused); + GC_G(first_unused)++; + } else { if (!GC_G(gc_enabled)) { GC_ZVAL_SET_BLACK(zv); return; @@ -177,10 +181,9 @@ return; } GC_ZVAL_SET_PURPLE(zv); + GC_G(unused) = newRoot->prev; } - GC_G(unused) = newRoot->prev; - newRoot->next = GC_G(roots).next; newRoot->prev = &GC_G(roots); GC_G(roots).next->prev = newRoot; @@ -215,7 +218,12 @@ if (!GC_ADDRESS(obj->buffered)) { gc_root_buffer *newRoot = GC_G(unused); - if (!newRoot) { + if (newRoot) { + GC_G(unused) = newRoot->prev; + } else if (GC_G(first_unused) != GC_G(last_unused)) { + newRoot = GC_G(first_unused); + GC_G(first_unused)++; + } else { if (!GC_G(gc_enabled)) { GC_ZVAL_SET_BLACK(zv); return; @@ -229,10 +237,9 @@ } obj = &EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(zv)].bucket.obj; GC_SET_PURPLE(obj->buffered); + GC_G(unused) = newRoot->prev; } - GC_G(unused) = newRoot->prev; - newRoot->next = GC_G(roots).next; newRoot->prev = &GC_G(roots); GC_G(roots).next->prev = newRoot; http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_gc.h?r1=1.1.2.6&r2=1.1.2.7&diff_format=u Index: ZendEngine2/zend_gc.h diff -u ZendEngine2/zend_gc.h:1.1.2.6 ZendEngine2/zend_gc.h:1.1.2.7 --- ZendEngine2/zend_gc.h:1.1.2.6 Fri Mar 14 18:36:34 2008 +++ ZendEngine2/zend_gc.h Fri Apr 11 17:31:53 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_gc.h,v 1.1.2.6 2008/03/14 18:36:34 dmitry Exp $ */ +/* $Id: zend_gc.h,v 1.1.2.7 2008/04/11 17:31:53 dmitry Exp $ */ #ifndef ZEND_GC_H #define ZEND_GC_H @@ -103,6 +103,8 @@ gc_root_buffer *buf; /* preallocated arrays of buffers */ gc_root_buffer roots; /* list of possible roots of cycles */ gc_root_buffer *unused; /* list of unused buffers */ + gc_root_buffer *first_unused; /* pointer to first unused buffer */ + gc_root_buffer *last_unused; /* pointer to last unused buffer */ zval_gc_info *zval_to_free; /* temporaryt list of zvals to free */ zval_gc_info *free_list;

« previous php.zend-engine.cvs (#6616) next »