Custom data type with a time watcher and memory control at process exit.

vvvua vvvua at lost.in.ua
Fri Oct 8 10:33:05 CEST 2010


08.10.2010 03:27, Marc Lehmann пишет:
> On Thu, Oct 07, 2010 at 01:42:12PM +0300, vvvua<vvvua at lost.in.ua>  wrote:
>    
>> I'm trying to handle with possible memory leaks in my project and
>> have some trouble with exit before timer's callback function starts.
>> I'm using Linux debian/g++.
>> So, if I have started 3 timers with custom data and allocation as
>>
>>      TimeSockMapper *mtm = new TimeSockMapper();
>>      mtm->repeat = 0;
>>      mtm->fd.clear();
>>
>>      ev_timer_init (&(mtm->  tm), heartbeat_cb, 0.001, 0.001);
>>      ev_timer_start(timeloop,&(mtm->tm));
>>
>> where "TimeSockMapper" is my custom data block:
>>
>> struct TimeSockMapper
>> {
>>      struct ev_timer tm;
>>      ev_tstamp repeat;
>>      ClientID fd;
>>      void *defPoint;
>>      TimeSockMapper()
>>      {
>>          defPoint = NULL;
>>      }
>> };
>>
>>
>> How can I rise all watchers on a defined "timeloop" to free a memory ?
>>      
> It's not quite clear to me what you want to know:
>
> If you want to free watcher memory, then that's your job to do once you
> stopped the watcher, as libev doesn't manage watcher memory itself.
>
> If you want to free a whole loop (which incidentally stops all watchers) you
> can call ev_loop_destroy() on the function.
>
> Or maybe your goal is something else?
>
>    
I don't have a list of pointers to watchers. Each watcher frees memory 
when callback function is invoked.
So I have two ways to free memory:
1) Create a list of pointers and free all memory manually when 
destroying a loop.
2) Generate events that invoke all registered callbacks using libev.

Is the second way possible? I understand, that libev doesn't free memory 
allocated by user.

P.S. small example:
I have created 2 watchers: first with 10 min and the second with 1 hour 
delay.
Both of them free memory in callback function.
The process is shutting down in 2 min after program starts.
I have to cancel watchers, destroy the loop and free memory.




More information about the libev mailing list