Index: ffi_library.c =================================================================== RCS file: /repository/pecl/ffi/ffi_library.c,v retrieving revision 1.17 diff -u -p -d -r1.17 ffi_library.c --- ffi_library.c 5 Oct 2005 20:00:06 -0000 1.17 +++ ffi_library.c 15 Nov 2005 12:11:48 -0000 @@ -406,7 +406,7 @@ static union _zend_function *php_ffi_met func = bind_func(obj, name, len TSRMLS_CC); if (func == NULL) { - if (obj->ce != php_ffi_context_class_entry) { + if (obj->zo.ce != php_ffi_context_class_entry) { #if 0 zend_internal_function *call_user_call = emalloc(sizeof(zend_internal_function)); call_user_call->type = ZEND_INTERNAL_FUNCTION; @@ -526,8 +526,8 @@ static union _zend_function *php_ffi_con obj = CTX_FETCH(object); - if (obj->ce != php_ffi_context_class_entry) { - return obj->ce->constructor; + if (obj->zo.ce != php_ffi_context_class_entry) { + return obj->zo.ce->constructor; } else { static zend_internal_function f; @@ -549,7 +549,7 @@ static zend_class_entry *php_ffi_class_e php_ffi_context *obj; obj = CTX_FETCH(object); - return obj->ce; + return obj->zo.ce; } static int php_ffi_class_name_get(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC) @@ -557,8 +557,8 @@ static int php_ffi_class_name_get(zval * php_ffi_context *obj; obj = CTX_FETCH(object); - *class_name = estrndup(obj->ce->name, obj->ce->name_length); - *class_name_len = obj->ce->name_length; + *class_name = estrndup(obj->zo.ce->name, obj->zo.ce->name_length); + *class_name_len = obj->zo.ce->name_length; return 0; } @@ -602,6 +602,8 @@ void php_ffi_context_dtor(void *object, { php_ffi_context *obj = (php_ffi_context*)object; + zend_objects_destroy_object(object, handle TSRMLS_CC); + zend_hash_destroy(&obj->functions); zend_hash_destroy(&obj->libraries); zend_hash_destroy(&obj->types); @@ -630,11 +632,11 @@ zend_object_value php_ffi_context_object obj = emalloc(sizeof(*obj)); memset(obj, 0, sizeof(*obj)); - + obj->zo.ce = ce; + zend_hash_init(&obj->functions, 2, NULL, php_ffi_func_dtor, 0); zend_hash_init(&obj->libraries, 2, NULL, php_ffi_lib_dtor, 0); zend_hash_init(&obj->types, 2, NULL, php_ffi_type_dtor, 0); - obj->ce = ce; retval.handle = zend_objects_store_put(obj, php_ffi_context_dtor, NULL, php_ffi_object_clone TSRMLS_CC); retval.handlers = &php_ffi_object_handlers; Index: ffi_struct.c =================================================================== RCS file: /repository/pecl/ffi/ffi_struct.c,v retrieving revision 1.17 diff -u -p -d -r1.17 ffi_struct.c --- ffi_struct.c 5 Oct 2005 19:59:11 -0000 1.17 +++ ffi_struct.c 15 Nov 2005 12:11:48 -0000 @@ -304,6 +304,8 @@ void php_ffi_struct_dtor(void *object, z { php_ffi_struct *obj = (php_ffi_struct*)object; + zend_objects_destroy_object(object, handle TSRMLS_CC); + if (obj->own_memory) { efree(obj->mem); } @@ -334,6 +336,7 @@ zend_object_value php_ffi_struct_object_ zend_object_value retval; obj = ecalloc(1, sizeof(*obj)); + obj->zo.ce = ce; retval.handle = zend_objects_store_put(obj, php_ffi_struct_dtor, NULL, php_ffi_struct_object_clone TSRMLS_CC); retval.handlers = &php_ffi_struct_object_handlers; Index: php_ffi_internal.h =================================================================== RCS file: /repository/pecl/ffi/php_ffi_internal.h,v retrieving revision 1.8 diff -u -p -d -r1.8 php_ffi_internal.h --- php_ffi_internal.h 13 Aug 2005 00:19:56 -0000 1.8 +++ php_ffi_internal.h 15 Nov 2005 12:11:48 -0000 @@ -64,14 +64,15 @@ struct php_ffi_field_def { /* state for ffi class */ typedef struct { + zend_object zo; HashTable libraries; /* libraries we loaded */ HashTable functions; /* case sensitive function names -> php_ffi_function */ HashTable types; /* structure definitions */ - zend_class_entry *ce; /* needed for inheritance to work */ } php_ffi_context; /* state for ffi_struct class */ typedef struct { + zend_object zo; unsigned own_memory:1; /* 1 if we need to efree the memory */ /* the chunk of memory */