Re: Re: Fix for bug #50333

From: Date: Wed, 30 Oct 2013 12:00:12 +0000
Subject: Re: Re: Fix for bug #50333
References: 1 2 3 4 5 6 7 8  Groups: php.internals 
Request: Send a blank email to internals+get-69965@lists.php.net to get a copy of this message
Hi Anatol, I've posted few comments at https://github.com/php/php-src/pull/500/files Otherwise, the patch looks fine. I think it may be accepted even if it doesn't make visible improvement. Of course, when the small issues described in comment are fixed. There were also a minor merging conflict in ext/opcache/ZendAccelerator.c (it's not a problem at all). I hope you testd ZTS PHP with patch well, because I mainly care about non-ZTS builds. Thanks. Dmitry. On Wed, Oct 30, 2013 at 10:49 AM, Dmitry Stogov <dmitry@zend.com> wrote: > I don't think it makes sense to invest into it right now. > Lets finish with existing patch. > > Also, alloca() allocates data on CPU stack, so such data is automatically > freed when function returns. > In case you change CWD_STATE_COPY() to use alloca(), the "state" couldn't > be returned from the function. > I'm not sure if it'll work for all use cases. > > Thanks. Dmitry. > > > On Wed, Oct 30, 2013 at 6:25 AM, Anatol Belski <ab@php.net> wrote: > >> Hi Dmitry, >> >> On Tue, 2013-10-29 at 11:45 +0400, Dmitry Stogov wrote: >> > Hi Anatol, >> > >> > >> > Thank you for update. >> > >> > I'm surprised you don't see speed difference even with ZTS :( >> > >> > >> > I didn't get what you propose to change in virtual_file_ex(). >> > >> > >> > I'll do a more careful patch review later on this week. >> > >> > >> >> the story is that >> >> - the original patch had replacements for all tsrm_do_alloca() and >> malloc() to emaloc() >> - after that, i've turned the places originally having tsrm_do_alloca() >> to do_alloca() >> >> Just as we discussed, and that's the current state of the patch. Still, >> there are many places using the e*() family of functions, like >> >> >> >> https://github.com/weltling/php-src/blob/bug50333/Zend/zend_virtual_cwd.c#L151 >> >> >> https://github.com/weltling/php-src/blob/bug50333/Zend/zend_virtual_cwd.c#L1340 >> >> Alone for that two I find 21 occurrences of each elsewhere in the file. >> As they are used very often in other filesystem functions like >> virtual_copy(), virtual_rename(), etc. That's why I thought it could >> make sense to turn any emalloc() usage into do_alloca(). But as the >> do_alloca(size, use_heap) requires that use_heap argument to determine >> the fallback situation, the signatures in at least that two cases for >> virtual_file_ex() or CWD_STATE_COPY() will need to be extended, so the >> correct freeing can happen. A simple snippet in pseudo code, just to >> illustrate the idea >> >> currently: >> >> some_function() >> { >> CWD_STATE_COPY(&new_state, &CWDG(cwd)); >> virtual_file_ex(&new_state, path, NULL, CWD_REALPATH TSRMLS_CC); >> CWD_STATE_FREE(&new_state); >> } >> >> should be like: >> >> some_function() >> { >> ALLOCA_FLAG(use_heap) >> CWD_STATE_COPY(&new_state, &CWDG(cwd), use_heap); >> virtual_file_ex(&new_state, path, NULL, CWD_REALPATH, use_heap >> TSRMLS_CC); >> CWD_STATE_FREE(&new_state, use_heap); >> } >> >> That's of course much deeper change and would affect more code outside >> just the scope of that one file, still that's manageable. I'd expect >> some more functions needing that, so then we'd have do_alloca() usage >> everywhere and drop all e*() invocations. Maybe then we see some >> effect :) >> >> Regards >> >> Anatol >> >> >> >> >> >> >

« previous php.internals (#69965) next »