2011/5/1 Guy Harris <guy@xxxxxxxxxxxx>:
>
> On May 1, 2011, at 4:51 AM, Max wrote:
>
>> I'm writing a dissector for a TCP-based protocol. I have a
>> conversation state object of my proto which is managed by
>> conversation_*_proto_data(). The state object is alloced by
>> se_alloc(), so it has a lifetime of capture, but the object itself
>> contains libgcrypt handles which are alloced by g_malloc. How should I
>> free these handles? Is there any mean to catch the moment when my
>> state object is about to be destroyed?
>
> If you register a routine with register_init_routine() (the routine takes no arguments and returns no value), it will be called *after* all the se_alloc()ated memory is freed. Will that suffice?
Well, the handles to the allocated resources are stored *in* the
se_alloc()ated memory. So a callback which is called just after it is
freed is pretty much useless.
>From the other side I can store the handles in two places:
1) in the conversation's state object where I use them;
2) in some global list of allocated resources which is read and
deallocated in the routine you've described.
But am I the only guy who finds this ugly? In this situation it would
be perfect if se_alloc() engine could call a callback with a user
supplied argument before it starts to deallocate anything.
--
Max