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/

Reply via email to