I am new to PHP extension writing and embedding. Following the book from
Sara Goleman - Extending and Embedding PHP (Developer's Library)
I wrote the following program based on her example in Chap. 20

===================================================================
#include <stdio.h>
#include <stdlib.h>

#include <sapi/embed/php_embed.h>

int main(int argc, char** argv) {
     PHP_EMBED_START_BLOCK(argc, argv);

   zval* args[2];
   zval funcname;
   zval input_str;
   zval count;
   zval retval;
   char* ans;
     ZVAL_STRING(&funcname, "str_repeat", 0);
   args[0] = &input_str;
   args[1] = &count;
   ZVAL_STRINGL(args[0], "DHIRU ", 6, 0);
   ZVAL_LONG(args[1], 5L);
     call_user_function(EG(function_table), NULL, &funcname, &retval, 2, args 
TSRMLS_CC);
     ans = Z_STRVAL(retval);
   printf("%s\n", ans);
     PHP_EMBED_END_BLOCK();
     return 0;
}

========================================================================

When I run this program it core dumps with the following message:

/export/home/dhiru/work/php/php-5.2.5/Zend/zend_variables.h(35) : Block 
0x08049188 status:
/export/home/dhiru/work/php/php-5.2.5/Zend/zend_variables.c(36) : Actual 
location (location was relayed)
Invalid pointer: ((thread_id=0x4C45535F) != (expected=0xB78D26B0))
Segmentation fault (core dumped)

When I step thru the debugger it appears that the function str_repeat call is 
successful
via zend_call_function(), but after the call to the str_repeat function it 
tries to execute
zend_ptr_stack_clear_multiple(TSRMLS_C), which in turn calls 
zend_mm_check_ptr() and something
seems to go wrong here :

#ifdef ZTS
   if (ZEND_MM_BAD_THREAD_ID(p)) {
       if (!silent) {
zend_debug_alloc_output("Invalid pointer: ((thread_id=0x%0.8X) != (expected=0x%0.8X))\n", (long)p->thread_id, (long)tsrm_thread_id());
           had_problems = 1;
       } else {
           return zend_mm_check_ptr(heap, ptr, 0 ZEND_FILE_LINE_RELAY_CC 
ZEND_FILE_LINE_ORIG_RELAY_CC);
       }
   }
#endif


Any help will be greatly appreciated

Thanks,
-Dhiru
P.S.: I am using Ubuntu and PHP 5.2.5

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to