Changeset 17912

Show
Ignore:
Timestamp:
10/04/08 12:24:59 (2 months ago)
Author:
piotras
Message:

Reduce memory usage. Basically limit memory abuse triggered by metadata object creation

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/branch-1-9/midgard/apis/php5/php_midgard_gobject.h

    r17483 r17912  
    5353        const unsigned char *buffer, zend_uint buf_len, zend_unserialize_data *data TSRMLS_CC); 
    5454 
     55void php_midgard_gobject_unset_property(zval *object, zval *member TSRMLS_CC); 
     56 
    5557/* SIGNALS */ 
    5658void php_midgard_gobject_connect(INTERNAL_FUNCTION_PARAMETERS); 
  • branches/branch-1-9/midgard/apis/php5/php_midgard_gobject_generic.c

    r17490 r17912  
    542542         
    543543        return; 
     544} 
     545 
     546void php_midgard_gobject_unset_property(zval *object, zval *member TSRMLS_DC) 
     547{ 
     548        zend_class_entry *ce = Z_OBJCE_P(object); 
     549 
     550        SEPARATE_ARG_IF_REF(member); 
     551        zend_call_method_with_1_params(&object, ce, &ce->__unset, ZEND_UNSET_FUNC_NAME, NULL, member); 
     552        zval_ptr_dtor(&member); 
    544553} 
    545554 
     
    700709 
    701710                if(Z_TYPE_PP(zvalue) == IS_OBJECT) { 
    702                         //g_print("DTOR '%s'\n", Z_OBJCE_PP(zvalue)->name); 
    703                         zend_object *pzo = zend_objects_get_address(*zvalue TSRMLS_CC); 
    704                         zend_object_handle zo_handle = Z_OBJ_HANDLE_P(*zvalue); 
     711                        //zend_object *pzo = zend_objects_get_address(*zvalue TSRMLS_CC); 
     712                        //zend_object_handle zo_handle = Z_OBJ_HANDLE_P(*zvalue); 
     713                        //php_midgard_gobject *php_gobject = 
     714                        //      (php_midgard_gobject *)zend_object_store_get_object(*zvalue TSRMLS_CC); 
     715 
     716                        //(*zvalue)->refcount--; 
    705717                        //zend_objects_free_object_storage(pzo TSRMLS_CC); 
     718                        //pzo = NULL; 
    706719                        //zend_objects_destroy_object(pzo, zo_handle TSRMLS_CC); 
    707                         //__php_midgard_gobject_dtor((void *) pzo TSRMLS_CC); 
     720                        //__php_midgard_gobject_dtor((void *) php_gobject TSRMLS_CC); 
     721                        //php_gobject = NULL; 
     722                        //php_gobject = NULL; 
    708723                        //zval_dtor(*zvalue); 
    709                         zend_object_std_dtor(pzo TSRMLS_CC); 
    710                         //zval_dtor(*zvalue); 
    711                         //efree(*zvalue); 
    712                  
    713                 } else { 
    714  
     724                         
     725                        //zend_object_std_dtor(pzo TSRMLS_CC); 
     726                        //zend_objects_destroy_object(pzo, zo_handle TSRMLS_CC); 
    715727                        zval_dtor(*zvalue); 
    716728                        efree(*zvalue); 
    717                 } 
    718  
     729                        //efree(pzo); 
     730                 
     731                }  
    719732                zend_hash_move_forward_ex(props, &iterator); 
    720733        } 
     
    732745                return; 
    733746 
     747        if(&php_gobject->zo == NULL) 
     748                return; 
     749 
    734750        zend_object_std_dtor(&php_gobject->zo TSRMLS_CC); 
    735751 
     
    740756         
    741757        } else if(G_OBJECT_TYPE_NAME(G_OBJECT(php_gobject->gobject)) != NULL){ 
    742                  
     758 
    743759                if(G_IS_OBJECT(php_gobject->gobject)) { 
    744  
    745760                        //__object_properties_dtor(&php_gobject->zo); 
    746761                        g_object_unref(G_OBJECT(php_gobject->gobject)); 
     
    750765 
    751766        php_gobject->gobject = NULL; 
    752  
    753767        efree(php_gobject); 
    754768 
    755769        php_gobject = NULL; 
     770        object = NULL; 
    756771} 
    757772 
     
    792807                        php_midgard_get_baseclass_ptr_by_name(G_OBJECT_TYPE_NAME(prop_gobject)); 
    793808 
    794                 object_init_ex(prop_zobject, ce); 
    795                 php_midgard_gobject_new_with_gobject(prop_zobject, ce, prop_gobject, TRUE); /* SHOULD BE SET TO TRUE */ 
    796  
    797                 zval *zprop
    798                 MAKE_STD_ZVAL(zprop)
    799                 php_midgard_gvalue2zval(&oval, zprop); 
     809                object_init_ex(prop_zobject, ce);       
     810                 
     811                php_midgard_gobject *php_gobject = 
     812                       (php_midgard_gobject *)zend_object_store_get_object(prop_zobject TSRMLS_CC)
     813                php_gobject->gobject = prop_gobject
     814 
    800815                zend_update_property(Z_OBJCE_P(zobject), zobject,  
    801816                                pspecs[i]->name, strlen(pspecs[i]->name),  
    802                                 zprop TSRMLS_CC); 
     817                                prop_zobject TSRMLS_CC); 
    803818 
    804819                g_value_unset(&oval);