Hi Lars,

Thank you for comments.

> Have you actually been able to measure that memory leak you observed,
> and you can confirm this patch will fix it?
> 
> Because I don't think this patch has any effect.

Yes.
I really measured leak.
I can show a result next week.
#Japan is a holiday until Tuesday.

> 
> send_rexmit_request() is only used as paramter to
> Gmain_timeout_add_full, and it returns FALSE always,
> which should cause the respective sourceid to be auto-removed.

It seems to be necessary to release gsource somehow or other.
The similar liberation seems to be carried out in lrmd.

Best Regards,
Hideo Yamauchi.


--- On Fri, 2012/4/27, Lars Ellenberg <lars.ellenb...@linbit.com> wrote:

> On Thu, Apr 26, 2012 at 10:56:30AM +0900, renayama19661...@ybb.ne.jp wrote:
> > Hi All,
> > 
> > We gave test that assumed remote cluster environment.
> > And we tested packet lost.
> > 
> > The retransmission timer of Heartbeat causes memory leak.
> > 
> > I donate a patch.
> > Please confirm the contents of the patch.
> > And please reflect a patch in a repository of Heartbeat.
> 
> Have you actually been able to measure that memory leak you observed,
> and you can confirm this patch will fix it?
> 
> Because I don't think this patch has any effect.
> 
> send_rexmit_request() is only used as paramter to
> Gmain_timeout_add_full, and it returns FALSE always,
> which should cause the respective sourceid to be auto-removed.
> 
> 
> > diff -r 106ca984041b heartbeat/hb_rexmit.c
> > --- a/heartbeat/hb_rexmit.c    Thu Apr 26 19:28:26 2012 +0900
> > +++ b/heartbeat/hb_rexmit.c    Thu Apr 26 19:31:44 2012 +0900
> > @@ -164,6 +164,8 @@
> >      seqno_t seq = (seqno_t) ri->seq;
> >      struct node_info* node = ri->node;
> >      struct ha_msg*    hmsg;
> > +    unsigned long           sourceid;
> > +    gpointer value;
> >  
> >      if (STRNCMP_CONST(node->status, UPSTATUS) != 0 &&
> >          STRNCMP_CONST(node->status, ACTIVESTATUS) !=0) {
> > @@ -196,11 +198,17 @@
> >      
> >      node->track.last_rexmit_req = time_longclock();    
> >      
> > -    if (!g_hash_table_remove(rexmit_hash_table, ri)){
> > -        cl_log(LOG_ERR, "%s: entry not found in rexmit_hash_table"
> > -               "for seq/node(%ld %s)",                
> > -               __FUNCTION__, ri->seq, ri->node->nodename);
> > -        return FALSE;
> > +    value = g_hash_table_lookup(rexmit_hash_table, ri);
> > +    if ( value != NULL) {
> > +        sourceid = (unsigned long) value;
> > +        Gmain_timeout_remove(sourceid);
> > +
> > +        if (!g_hash_table_remove(rexmit_hash_table, ri)){
> > +            cl_log(LOG_ERR, "%s: entry not found in rexmit_hash_table"
> > +                       "for seq/node(%ld %s)",                
> > +                       __FUNCTION__, ri->seq, ri->node->nodename);
> > +            return FALSE;
> > +        }
> >      }
> >      
> >      schedule_rexmit_request(node, seq, max_rexmit_delay);
> 
> 
> -- 
> : Lars Ellenberg
> : LINBIT | Your Way to High Availability
> : DRBD/HA support and consulting http://www.linbit.com
> 
> DRBD® and LINBIT® are registered trademarks of LINBIT, Austria.
> _______________________________________________________
> Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
> 
_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/

Reply via email to