The whole picture is that i want to control a child process completely 
from within php. A bit like popen or proc_open but with 2 independent
pipes to the child's stdin and stdout that I can read and write to. So
I'm basically wrapping the c functions pipe(), dup2() and friends. Once
I have it all working I will offer to add the functions into the pcntl
extension if they're wanted. 

Anyway the code in the pipe function that was giving me the warnings is
as follows:

PHP_FUNCTION(pipe)
{
    pipe_r_le_struct *st_pipe_r;
    pipe_w_le_struct *st_pipe_w;
    zval *read;
    zval *write;
    int pipe_fd[2];

    if( pipe(pipe_fd ) <0 ){
        php_error( E_ERROR, "Could not create pipe" );
    }

    st_pipe_r = emalloc( sizeof( pipe_r_le_struct ) );
    st_pipe_w = emalloc( sizeof( pipe_w_le_struct ) );

    st_pipe_r->fd = pipe_fd[0];
    st_pipe_w->fd = pipe_fd[1];

    MAKE_STD_ZVAL( read );
    MAKE_STD_ZVAL( write );

    ZEND_REGISTER_RESOURCE( read, st_pipe_r, le_pipe_r )
    ZEND_REGISTER_RESOURCE( write, st_pipe_w, le_pipe_w )


    array_init( return_value );
    add_assoc_resource( return_value, "read", Z_RESVAL_P( read ) );
    add_assoc_resource( return_value, "write", Z_RESVAL_P( write ) );

}

If i use FREE_ZVAL() at the end of this function I can get rid of the
warnings but I would guess this is the wrong place and it should be
taken care of in a cleanup function when the request has finished.

Please excuse me if I am missing something obvious here, as you may
guess I'm still finding my feet writing PHP extensions.

Tony


On Sat, 2002-11-09 at 08:56, Andi Gutmans wrote:
> Actually zval_ptr_dtor() is probably more suitable.
> In any case, is this zval something you keep locally in your extension or 
> are you returning/adding it to the engine's symbol table? If so, the engine 
> should take care of the memory automatically as long as you've done 
> everything correctly.
> Maybe you should explain in more detail what you're doing.
> Andi
> 




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

Reply via email to