On 09/04/2020 23:27, Nikolay Sivov wrote:
On 4/9/20 5:34 PM, Gabriel Ivăncescu wrote:
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com
We have to treat a ref count of 0 in a special manner when they are linked to the script control, because the modules must exist even when they have no external refs (as the script control can still use them).
However, as evidenced by the tests, they must *not* keep a ref to the script control in this case, as it would create a circular ref and make no sense, anyway.
An alternative to that is to separate actual data of such script_module, using separate refcount, and IScriptModule accessor object.
Sorry, I completely missed this reply earlier for some reason...
But, wouldn't this alternative require that we duplicate the module's data? Let's look at the module's name: it's required both by the Module Collection (to retrieve a module, or add one without conflict) and by an individual Module interface (since it can be orphaned, see put_Language which releases the modules from the Script Control).
Obviously, it's possible that no module is held externally and we only query for module names using the Module Collection. In this case, the module must *not* hold a ref to the Script Control, hence the hold trick.
However, if a module is retrieved, then the module data would have to be duplicated/allocated in a different spot, and refcount to the Script Control added, since it's now externally held with a refcount of 1.
It's, IMO, way more complicated than the current approach.
Thanks, Gabriel