Hi Lars,

Sorry...An answer was late.

In the environment where we confirmed leak, I confirm your patch.

Many Thanks,
Hideo Yamauchi.

--- On Wed, 2012/5/16, Lars Ellenberg <[email protected]> wrote:

> On Tue, May 15, 2012 at 11:14:53AM +0200, Lars Ellenberg wrote:
> > On Mon, May 14, 2012 at 05:44:55PM +0200, Lars Ellenberg wrote:
> > > > By the way, I suspect Lars' suggestion would work fine.  I would 
> > > > certainly explain what the "better" patch is in the comments when you 
> > > > apply this one.
> 
> > Hm. Looks like it *does* explode (aka segfault)
> 
> Continuing my monologue ...
> it may just have been incomplete.
> 
> The patch below seems to work just fine.
> 
> I managed to occasionally trigger the
>     "Attempt to remove timeout (%u) with NULL source"
> message, but I have seen that one without the patch as well,
> so that may just be some other oddity somewhere:
> double removal of timeout resources ;-)
> 
> We can find and drop those later,
> they look harmless enough.
> 
> I do not see any memleak anywhere anymore with this patch applied.
> 
> Comments/review/testing welcome.
> 
> # HG changeset patch
> # User Lars Ellenberg <[email protected]>
> # Date 1337066453 -7200
> # Node ID e63dd41f46b7bd150a23a62303bde6be78305c9c
> # Parent  63d968249025b245e38b1da6d0202438ec45ebf3
> [mq]: potential-fix-for-timer-leak
> 
> diff --git a/lib/clplumbing/GSource.c b/lib/clplumbing/GSource.c
> --- a/lib/clplumbing/GSource.c
> +++ b/lib/clplumbing/GSource.c
> @@ -1507,6 +1507,7 @@
>      g_source_set_callback(source, function, data, notify); 
>  
>      append->gsourceid = g_source_attach(source, NULL);
> +    g_source_unref(source);
>      return append->gsourceid;
>  
>  }
> @@ -1517,14 +1518,12 @@
>      GSource* source = g_main_context_find_source_by_id(NULL,tag);
>      struct GTimeoutAppend* append = GTIMEOUT(source);
>      
> -    g_source_remove(tag);
> -    
>      if (source == NULL){
>          cl_log(LOG_ERR, "Attempt to remove timeout (%u)"
>          " with NULL source",    tag);
>      }else{
>          g_assert(IS_TIMEOUTSRC(append));
> -        g_source_unref(source);
> +        g_source_remove(tag);
>      }
>      
>      return;
> 
> -- 
> : Lars Ellenberg
> : LINBIT | Your Way to High Availability
> : DRBD/HA support and consulting http://www.linbit.com
> _______________________________________________________
> Linux-HA-Dev: [email protected]
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
> 
_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/

Reply via email to