2010/12/17 Eric Blake <eblake(a)redhat.com>:
On 12/17/2010 11:56 AM, Matthias Bolte wrote:
> XPCOM returns an array as a pointer to an array of pointers to the
> actual items. When the array isn't needed anymore the items are
> released, but the actual array containing the pointers to the items
> was not freed and leaked.
>
> Free the actual array using ComUnallocMem.
>
> This doesn't affect MSCOM as SafeArrayDestroy releases all items
> and frees the array.
> ---
> src/vbox/vbox_XPCOMCGlue.c | 4 ++++
> 1 files changed, 4 insertions(+), 0 deletions(-)
>
> diff --git a/src/vbox/vbox_XPCOMCGlue.c b/src/vbox/vbox_XPCOMCGlue.c
> index 5992350..dcaf682 100644
> --- a/src/vbox/vbox_XPCOMCGlue.c
> +++ b/src/vbox/vbox_XPCOMCGlue.c
> @@ -339,6 +339,8 @@ vboxArrayRelease(vboxArray *array)
> }
> }
>
> + pVBoxFuncs_v2_2->pfnComUnallocMem(array->items);
> +
ACK. Was this the leak you were telling me on IRC that exists even in
the XPCOM example code? And certainly easier to plug given the wrapper
function you created in 4/6 than to plug at every call site.
Yes, that's the leak that's also in the XPCOM example code in the
VirtualBox SDK.
Thanks, pushed.
Matthias