Recherche expert en zend engine & fonctionnement interne de PHP :o

Recherche expert en zend engine & fonctionnement interne de PHP :o - PHP - Programmation

Marsh Posté le 01-06-2014 à 19:05:23    

Du coup je sais pas trop s'il faut ranger dans C ou dans PHP :D
 
Je galère grave avec ce qui ressemble à un pb d'allocation mémoire sur une extension PHP (le code est assez simple).
 
En gros j'aimerais stocker dans un array les paramètres courant d'une fonction, qui seront ensuite passés à une nouvelle fonction PHP.
J'aimerais que les paramètres ne sont pas des copies, mais des références, du coup je n'incrémente que le refcount de chaque argument, mais ca à l'air de souvent foirer :
 
Ex :  
 

Code :
  1. zval *element;
  2. ALLOC_ZVAL(element);
  3. // copy the value, type & refcount / is_ref
  4.         INIT_PZVAL_COPY(element, *((zval **) (p-(arg_count-i))));
  5.         // increment the ref count
  6.         zval_add_ref(&element);
  7. zend_hash_next_index_insert((*args[0])->value.ht, &element, sizeof(zval *), NULL);


 
ce args[0] sera transmis à la nouvelle fonction PHP via :
 

Code :
  1. call_user_function_ex(EG(function_table), NULL, cl->func, &retval, arg_count, args, 0,NULL TSRMLS_CC);


 
Si vous voyez un truc totalement débile dans ce bout de code ou dans le concept, je suis preneur !

Reply

Marsh Posté le 01-06-2014 à 19:05:23   

Reply

Marsh Posté le 01-06-2014 à 22:36:05    

bon j'ai essayé à la place
 

Code :
  1. zval *element;
  2.  ALLOC_ZVAL(element);
  3.  *element = *(EG(current_execute_data)->object);
  4.  zval_copy_ctor(element);
  5.  INIT_PZVAL(element);
  6.                 zend_hash_next_index_insert((*args[0])->value.ht, &element, sizeof(zval *), NULL);


 
sachant que je suis dans une fonction qui a intercepté l'appel à execute_internal du zend engine. (hook sur le execute_internal)
ce que je ne comprends absolument pas c'est que la valeur de args[0] réussit à être modifiée après appel à execute_internal (qui modifie EG(current_execute_data)->object), alors que la valeur stockée dans mon Hash est censé être une copie de EG(current_execute_data)->object.....
Je sèche completement :(
 
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed