[Libguestfs] libnbd: When are callbacks freed

Tage Johansson tage.j.lists at posteo.net
Thu Jul 13 12:03:19 UTC 2023


On 7/13/2023 1:03 PM, Richard W.M. Jones wrote:
> On Thu, Jul 13, 2023 at 09:53:58AM +0000, Tage Johansson wrote:
>> Apologize if resending, but I'm not sure my previous email was
>> actually delivered.
>>
>>
>> On 7/12/2023 10:33 PM, Eric Blake wrote:
>>
>>
>>> On Wed, Jul 12, 2023 at 03:19:59PM +0000, Tage Johansson wrote:
>>>> Hello,
>>>>
>>>>
>>>> While writing some tests for the Rust bindings, I discovered a
>>>> memory leak
>>>> with Valgrind due to a completion callback not being freed. More
>>>> specificly,
>>>> the completion callback of `aio_opt_info()` doesn't seem to be if
>>>> `aio_opt_info()` failes. In this case, `aio_opt_info()` was called in the
>>>> connected state, so it should indeed fail, but it should perhaps
>>>> also call
>>>> the free function associated with the callback.
>>> Can you paste the valgrind output showing the leak?
>>
>> The Valgrind output is very Rust specific and only shows the Rust
>> allocations which goes into the completion callback and are lost.
>>
>>
>> But if you apply the following patch (which modifies
>> tests/opt-info.c) you shall see that the completion callback is not
>> called.
>>
>> I have replaced a call to `nbd_opt_info()` with a call to
>> `nbd_aio_opt_info()` and passed in a completion callback which just
>> calls `exit(EXIT_FAILURE)`. So if the completion callback is called
>> the test should fail, which it doesn't, at least not on my machine.
> Isn't that OK?  Only .free is required to be called.


Of course, you are right. I will continue investigating why my Rust 
closure isn't freed though.


Best regards,

Tage




More information about the Libguestfs mailing list