On 1/17/08, Antony Dovgal <[EMAIL PROTECTED]> wrote:
> On 17.01.2008 23:33, Michael B Allen wrote:
> > This has worked fine
>
> Are you really sure?
It has worked just fine under load in production with PHP 5, 5.0 and
5.1. It *seems* there's something different about 5.2.
> Does valgrind confirm it?
I have run valgrind (primarily for leak checking) and I don't recall
seeing any complaints about the code or objects in question.
> > PHP_FUNCTION(foo_status)
> > {
> > zval *r;
> > char *s = "";
> > int slen;
> > struct foo *foo = NULL;
> >
> > if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z!|s!",
> > &r, &s, &slen) == FAILURE) {
> > RETURN_FALSE;
> > }
> >
> > if (r)
> > foo = (struct foo *)zend_fetch_resource(&r TSRMLS_CC,
> > -1, "foo", NULL, 1, le_foo);
> >
> > if (ZEND_NUM_ARGS() > 1) {
> > foo_status(foo) = s; // save the status for possible retrieval later
> > }
>
> I don't know what "foo_status(foo)" is supposed to mean here,
It's saving s into foo. It's actually an errno style macro that
dereferences a char ** to assign the value to a member of foo.
> but this code was never supposed to work.
Well it did.
> You have to copy the string if you want to store it.
Ok. Doesn't look like I have much choice. I just wanted to understand
the problem better. I'll just copy the strings.
But it does seem odd to me that PHP does not always reference string
constants directly. I mean, why copy if you don't have to?
Mike
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php