> De : Xinchen Hui [mailto:larue...@php.net]
> > I don't understand how you can delete the resource if you remove the
> handle from the zend_resource struct. Or would you store the index
> elsewhere ?
> 
> if you use HashTable ,  yes, it's hard to get rid of it, but we can
> hidden it from user land..
> 
> and actually,  we only use integer index of regular_list for zend_resource..
> 
> if we decide to remove handle, then it maybe easy to re-implement it
> as a plain c array like zend_resource[];
> 
> and when doing realloce, we allocate new segment, and link them togther.

Anyway, IMO, moving resources from HashTable to a plain C array is a good 
thing. Allocating segments of 20 structs, for instance, would be fine as a 
single segment would fit 99.9 % of the cases. This way, you could even compute 
a pseudo resource handle from the zend_resource address (for var_dump()). The 
only additional thing you would need is a field to mark the resource as 
deleted/invalid. But setting ptr to NULL and type to -1 would be probably 
enough.

I am interested in the subject of resources because I just implemented a 
resource abstraction layer in php-ext-gen 
(https://github.com/flaupretre/php-ext-gen). The objective being to use the 
same user code for PHP 5 and 7. Maybe you can have a look at the project and 
give me your opinion.

Regards

François



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

Reply via email to