Bug 1788592 Comment 15 Edit History

Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.

Hello,

(In reply to Jeff Muizelaar [:jrmuizel] from comment #12)
> The at-exit callback is doing:
> ```c
> VariantClear(vtMissing)
> ```
> it comes from the `_variant_t` destructor. So presumably we're getting a `_variant_t vtMissing` when we didn't have that before.

I was able to reproduce Jeff's experiments with his help. I can provide additional information about why this happens.

The call we see here is a direct consequence of the library `comsupp.lib` beging statically linked when building `xul.dll`, and `xul.dll` being dynamically loaded in `plugin-container.exe`. Indeed, `vtMissing` and its the corresponding `dynamic_atexit_destructor_for_'vtMissing'` are defined in `comutil.obj` which is a part of `comsupp.lib`. Exiting the process results in calling the `dynamic_atexit_destructor_for_'vtMissing'`, which calls the delay-import for `VariantClear`, resulting in trying to load `OLEAUT32.DLL`, and failing at that because the sandbox is active and we cannot read the library file on disk.

So the main question now is what part of the first sentence of the previous paragraph is new compared to older versions.
Hello,

(In reply to Jeff Muizelaar [:jrmuizel] from comment #12)
> The at-exit callback is doing:
> ```c
> VariantClear(vtMissing)
> ```
> it comes from the `_variant_t` destructor. So presumably we're getting a `_variant_t vtMissing` when we didn't have that before.

I was able to reproduce Jeff's experiments with his help. I can provide additional information about why this happens.

The call we see here is a direct consequence of the library `comsupp.lib` beging statically linked when building `xul.dll`, and `xul.dll` being dynamically loaded in `plugin-container.exe`. Indeed, `vtMissing` and its the corresponding `dynamic_atexit_destructor_for_'vtMissing'` are defined in `comutil.obj` which is a part of `comsupp.lib`. Exiting the process results in calling the `dynamic_atexit_destructor_for_'vtMissing'`, which calls the delay-import for `VariantClear`, resulting in trying to load `OLEAUT32.DLL`, and failing at that because the sandbox is active and we cannot read the library file on disk.

So the main question now is what part of the first sentence of the previous paragraph is new compared to older versions and why.
Hello,

(In reply to Jeff Muizelaar [:jrmuizel] from comment #12)
> The at-exit callback is doing:
> ```c
> VariantClear(vtMissing)
> ```
> it comes from the `_variant_t` destructor. So presumably we're getting a `_variant_t vtMissing` when we didn't have that before.

I was able to reproduce Jeff's experiments with his help. I can provide additional information about why this happens.

The call we see here is a direct consequence of the library `comsupp.lib` beging statically linked when building `xul.dll`, and `xul.dll` being dynamically loaded in `plugin-container.exe`. Indeed, `vtMissing` and the corresponding `dynamic_atexit_destructor_for_'vtMissing'` are defined in `comutil.obj` which is a part of `comsupp.lib`. Exiting the process results in calling the `dynamic_atexit_destructor_for_'vtMissing'`, which calls the delay-import for `VariantClear`, resulting in trying to load `OLEAUT32.DLL`, and failing at that because the sandbox is active and we cannot read the library file on disk.

So the main question now is what part of the first sentence of the previous paragraph is new compared to older versions and why.
Hello,

(In reply to Jeff Muizelaar [:jrmuizel] from comment #12)
> The at-exit callback is doing:
> ```c
> VariantClear(vtMissing)
> ```
> it comes from the `_variant_t` destructor. So presumably we're getting a `_variant_t vtMissing` when we didn't have that before.

I was able to reproduce Jeff's experiments with his help. I can provide additional information about why this happens.

The call we see here is a direct consequence of the library `comsupp.lib` being statically linked when building `xul.dll`, and `xul.dll` being dynamically loaded in `plugin-container.exe`. Indeed, `vtMissing` and the corresponding `dynamic_atexit_destructor_for_'vtMissing'` are defined in `comutil.obj` which is a part of `comsupp.lib`. Exiting the process results in calling the `dynamic_atexit_destructor_for_'vtMissing'`, which calls the delay-import for `VariantClear`, resulting in trying to load `OLEAUT32.DLL`, and failing at that because the sandbox is active and we cannot read the library file on disk.

So the main question now is what part of the first sentence of the previous paragraph is new compared to older versions and why.

Back to Bug 1788592 Comment 15