Today I've been debugging a segfault with my namespace patch until I found
that the problem was simply the placement of a variable in a struct. I
still don't see the logic behind it, but I got the segfault both in Windows
2000 and Linux (FC3). The steps to reproduce this segfault are very simple
(using PHP 5.1.0b2):
1) In zend_globals.h, modify the struct _zend_executor_globals and add a
simple HashTable pointer after class_table or zend_constants. It should
look like this:
...
HashTable *class_table; /* class table */
HashTable *my_hash;
HashTable *zend_constants; /* constants table */
2) Compile PHP. Now any script you execute will produce a segmentation
fault.
3) Move your hash table to the end of the struct, right before the
"reserved" array:
HashTable *my_hash;
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
4) make clean (or simply delete all the *.o and *.lo files under Zend/) and
compile PHP again. All executed scripts work as usual, and no segfault is
produced.
Does anyone know why this happens?
Regards,
Jessie Hernandez
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php