On Fri, Nov 6, 2015 at 3:08 AM, François Laupretre <franc...@php.net> wrote:
> Hi, > > First, I don't know if this must be considered as a bug, because a lot of > features are not available during MINIT but it seems quite inconsistent. I > precise I'm using the 7.x master branch (I don't know if it works on 5.x or > not). > MINIT wasn't designed to run any php code. You can't create objects and resources in this stage. > > I am writing an extension where I need to read a file tree during the > MINIT phase. So, I am using php_stream_scandir() to read some directories. > At this time, php_init_stream_wrappers() has run, so I consider stream > wrappers are available. > > Unfortunately, this is not true because stream wrappers register resources > in EG(regular_list), which is not initialized before init_compiler() has > run. If I call zend_hash_init(&(EG(regular_list))) before calling > php_stream_scandir(), it seems to works. But it is not the solution because > the hashtable is never destroyed and there are probably other side effects. > The same potentially applies to EG(persistent_list). > > So, does it mean that stream wrappers cannot be used during MINIT, or do > you know a workaround ? I can revert to the C stdio library but, for > portability reasons, I'd prefer using the plain wrapper. Every suggestion > is welcome. > It seems, you can't use wrappers. Probably, nobody tried this before :) You may try to use php_scandir() wrapper. > > Another suggestion to help detecting such issues : can we consider, in > _zend_is_inconsistent(), that a HashTable whose nTableSize is null is > inconsistent and raises an alert. An uninitialized HashTable generally is > filled with 0s. Today, using an uninitialized HashTable goes undetected, > even in debug mode (because HT_OK == 0), and is very hard to track. > Uninitialized HashTables are not necessary filled with 0s. We can add more assert()s, but this is going to be a protection from our selves. Anyway, attempts of destruction of uninitialized HashTables most probably should lead to crash. Thanks. Dmitry. > > Regards > > François >