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/