[PATCH v2 02/10] vbscript: Reference count the persistent code list.

Gabriel Ivăncescu gabrielopcode at gmail.com
Thu Nov 14 06:50:40 CST 2019

On 11/13/19 11:53 PM, Jacek Caban wrote:
> Hi Gabriel,
> On 11/13/19 4:24 PM, Gabriel Ivăncescu wrote:
>> Signed-off-by: Gabriel Ivăncescu<gabrielopcode at gmail.com>
>> ---
>> This is needed for the TypeInfo since it needs to hold a ref to the
>> persistent code, too. Though we keep the ref in the script dispatch since
>> it's more correct this way (even though we bail out when there's no 
>> context,
>> we still technically reference the persistent code funcs/classes in the
>> dispatch object).
>> I couldn't refcount the script context itself since it is re-used 
>> after being
>> closed, and was not deemed a good approach to free it (my previous 
>> attempts).
> It doesn't look pretty, but also I think it's not enough for what you 
> need. What about non-persistent code? Unless I'm missing something, this 
> will be exposed from ITypeInfo as well, but freed when script is 
> uninitialized, so we will crash on an attempt to access it. An 
> alternative idea would be to add a reference count to vbscode_t itself. 
> It could be referenced by each entry in global variables and functions 
> arrays as well as from ITypeInfo implementation. How does that sound?
> Thanks,
> Jacek

The non-persistent code gets moved to the script dispatch when it is 
released, so it shouldn't be an issue, because the TypeInfo keeps a 
reference to it, so the script dispatch itself won't be freed when the 
script gets released in this particular case.

Refcounting the vbscode itself is possible but I think it will be more 
complicated though. We'll also have to loop through all 
variables/functions to add a ref to them when creating the TypeInfo 
(currently we don't even store the vars list at all since we read it 
directly from the script dispatch).

I think this is the simplest approach, still. (ref counting the 
persistent code list)


More information about the wine-devel mailing list