> Im looking at adding threading to php, (for the cgi/cli stuff)..
>
> The story so far:
>
> I've created an extension which diverts all zend_execute calls into the
>  extension -> phpthreads_execute.
> this function is a copy of zend_execute with a few modifications
> - to copy & restore things like  EG(active_symbol_table);
> - to malloc lock and unlock the execute loop and release on each
> opcode.
>
> I've started testing the phpthreads_create($callback); - it appears to
> work ok, execept it segfaults on completion.. - trying to reduce
> refcounts somewhere.
>
> The fireup code looks something like this..
>
> void phpthreads_create(void *ptr) {
>        zval myretval;
>        zval *callback = (zval *) ptr;
>
>        if (!call_user_function( EG(function_table), NULL, callback,
> &myretval, 0, NULL TSRMLS_CC ))  {
>                zend_error(E_ERROR, "Problem Starting thread with
> callback");
>        }
>
>        pthread_exit(NULL);
>
>
> }
> /* {{{ proto string phpthreads_thread(string function)
>   Return a string to confirm that the module is compiled in */
> PHP_FUNCTION(phpthreads_create)
> {
>
>        zval *callback;
>        pthread_t thread;
>
>      if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z",
> &callback) == FAILURE) {
>          return;
>      }
>        pthread_create( &thread, NULL, (void *) phpthreads_create,
> (void*) callback);
>        RETURN_TRUE;
> }
>
> and the backtrace of the simple threaded test looks like this..
> 0x08128f08 in _zval_ptr_dtor (zval_ptr=0x81b5ce8) at
> /usr/src/php/php4/Zend/zend_execute_API.c:275
> 275             (*zval_ptr)->refcount--;
> (gdb) bt
> #0  0x08128f08 in _zval_ptr_dtor (zval_ptr=0x81b5ce8) at
> /usr/src/php/php4/Zend/zend_execute_API.c:275
> #1  0x424ceba2 in ?? ()
> #2  0x424c7c92 in ?? ()
> #3  0x08130588 in zend_execute_scripts (type=8, retval=0x0,
> file_count=3) at /usr/src/php/php4/Zend/zend.c:810
> #4  0x08110abd in php_execute_script (primary_file=0x40006c71) at
> /usr/src/php/php4/main/main.c:1398
> #5  0x08110138 in php_module_shutdown () at
> /usr/src/php/php4/main/main.c:1058
> #6  0x2e325f43 in ?? ()
>
> does anyone want to suggest what might be missing - is it worth putting
>  this into pecl - and does someone what to lend a hand??
>

well, not until it doesn't segfault after every request, no. :)

I'd also think you'd need a quite larger subset of Pthreads, and perhaps
focus on an OO solution (like what Perl does), but that's all surrounding
elements.

Good luck with threading the Zend Engine :P

-Sterling

> regards
> alan
>
>
>
>
>
>
> --
> PHP Development Mailing List <http://www.php.net/>
> To unsubscribe, visit: http://www.php.net/unsub.php




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

Reply via email to