[Pacemaker] [Problem]When Pacemaker uses a new version of glib, g_source_remove fails.

renayama19661014 at ybb.ne.jp renayama19661014 at ybb.ne.jp
Mon Oct 13 23:45:23 UTC 2014


Hi Andrew,

The problem was settled with your patch.
Please merge a patch into master.

Please confirm whether there is not a problem in other points either concerning g_timeout_add() and g_source_remove() if possible.


Many Thanks!
Hideo Yamauchi.



----- Original Message -----
> From: "renayama19661014 at ybb.ne.jp" <renayama19661014 at ybb.ne.jp>
> To: The Pacemaker cluster resource manager <pacemaker at oss.clusterlabs.org>
> Cc: 
> Date: 2014/10/10, Fri 15:34
> Subject: Re: [Pacemaker] [Problem]When Pacemaker uses a new version of glib, g_source_remove fails.
> 
> Hi Andrew,
> 
> Thank you for comments.
> 
>>  diff --git a/lib/services/services_linux.c b/lib/services/services_linux.c
>>  index 961ff18..2279e4e 100644
>>  --- a/lib/services/services_linux.c
>>  +++ b/lib/services/services_linux.c
>>  @@ -227,6 +227,7 @@ recurring_action_timer(gpointer data)
>>      op->stdout_data = NULL;
>>      free(op->stderr_data);
>>      op->stderr_data = NULL;
>>  +    op->opaque->repeat_timer = 0;
>>  
>>      services_action_async(op, NULL);
>>      return FALSE;
> 
> 
> I confirm a correction again.
> 
> 
> 
> Many Thanks!
> Hideo Yamauchi.
> 
> 
> 
> ----- Original Message -----
>>  From: Andrew Beekhof <andrew at beekhof.net>
>>  To: renayama19661014 at ybb.ne.jp; The Pacemaker cluster resource manager 
> <pacemaker at oss.clusterlabs.org>
>>  Cc: 
>>  Date: 2014/10/10, Fri 15:19
>>  Subject: Re: [Pacemaker] [Problem]When Pacemaker uses a new version of 
> glib, g_source_remove fails.
>> 
>>  /me slaps forhead
>> 
>>  this one should work
>> 
>>  diff --git a/lib/services/services.c b/lib/services/services.c
>>  index 8590b56..753e257 100644
>>  --- a/lib/services/services.c
>>  +++ b/lib/services/services.c
>>  @@ -313,6 +313,7 @@ services_action_free(svc_action_t * op)
>> 
>>       if (op->opaque->repeat_timer) {
>>           g_source_remove(op->opaque->repeat_timer);
>>  +        op->opaque->repeat_timer = 0;
>>       }
>>       if (op->opaque->stderr_gsource) {
>>           mainloop_del_fd(op->opaque->stderr_gsource);
>>  @@ -425,6 +426,7 @@ services_action_kick(const char *name, const char 
> *action, 
>>  int interval /* ms */
>>       } else {
>>           if (op->opaque->repeat_timer) {
>>               g_source_remove(op->opaque->repeat_timer);
>>  +            op->opaque->repeat_timer = 0;
>>           }
>>           recurring_action_timer(op);
>>           return TRUE;
>>  @@ -459,6 +461,7 @@ handle_duplicate_recurring(svc_action_t * op, void 
>>  (*action_callback) (svc_actio
>>           if (dup->pid != 0) {
>>               if (op->opaque->repeat_timer) {
>>                   g_source_remove(op->opaque->repeat_timer);
>>  +                op->opaque->repeat_timer = 0;
>>               }
>>               recurring_action_timer(dup);
>>           }
>>  diff --git a/lib/services/services_linux.c b/lib/services/services_linux.c
>>  index 961ff18..2279e4e 100644
>>  --- a/lib/services/services_linux.c
>>  +++ b/lib/services/services_linux.c
>>  @@ -227,6 +227,7 @@ recurring_action_timer(gpointer data)
>>       op->stdout_data = NULL;
>>       free(op->stderr_data);
>>       op->stderr_data = NULL;
>>  +    op->opaque->repeat_timer = 0;
>> 
>>       services_action_async(op, NULL);
>>       return FALSE;
>> 
>> 
>>  On 10 Oct 2014, at 4:45 pm, renayama19661014 at ybb.ne.jp wrote:
>> 
>>>   Hi Andrew,
>>> 
>>>   I applied three corrections that you made and checked movement.
>>>   I picked all "abort" processing with g_source_remove() of 
>>  services.c just to make sure.
>>>    * I set following "abort" in four places that carried out 
>>  g_source_remove
>>> 
>>>>>>            if 
> (g_source_remove(op->opaque->repeat_timer) == 
>>  FALSE)  
>>>>   {
>>>>>>                    abort();
>>>>>>            }
>>> 
>>> 
>>>   As a result, "abort" still occurred.
>>> 
>>> 
>>>   The problem does not seem to be yet settled by your correction.
>>> 
>>> 
>>>   (gdb) where
>>>   #0  0x00007fdd923e1f79 in __GI_raise (sig=sig at entry=6) at 
>>  ../nptl/sysdeps/unix/sysv/linux/raise.c:56
>>>   #1  0x00007fdd923e5388 in __GI_abort () at abort.c:89
>>>   #2  0x00007fdd92b9fe77 in crm_abort (file=file at entry=0x7fdd92bd352b 
>>  "logging.c", 
>>>       function=function at entry=0x7fdd92bd48c0 <__FUNCTION__.23262> 
>>  "crm_glib_handler", line=line at entry=73, 
>>>       assert_condition=assert_condition at entry=0xe20b80 "Source ID 
> 40 was 
>>  not found when attempting to remove it", do_core=do_core at entry=1, 
>>>       do_fork=<optimized out>, do_fork at entry=1) at utils.c:1195
>>>   #3  0x00007fdd92bc7ca7 in crm_glib_handler (log_domain=0x7fdd92130b6e 
>>  "GLib", flags=<optimized out>, 
>>>       message=0xe20b80 "Source ID 40 was not found when attempting 
> to 
>>  remove it", user_data=<optimized out>) at logging.c:73
>>>   #4  0x00007fdd920f2ae1 in g_logv () from 
>>  /lib/x86_64-linux-gnu/libglib-2.0.so.0
>>>   #5  0x00007fdd920f2d72 in g_log () from 
>>  /lib/x86_64-linux-gnu/libglib-2.0.so.0
>>>   #6  0x00007fdd920eac5c in g_source_remove () from 
>>  /lib/x86_64-linux-gnu/libglib-2.0.so.0
>>>   #7  0x00007fdd92984b55 in cancel_recurring_action 
> (op=op at entry=0xe19b90) at 
>>  services.c:365
>>>   #8  0x00007fdd92984bee in services_action_cancel 
> (name=name at entry=0xe1d2d0 
>>  "dummy2", action=<optimized out>, 
> interval=interval at entry=10000)
>>>       at services.c:387
>>>   #9  0x000000000040405a in cancel_op (rsc_id=rsc_id at entry=0xe1d2d0 
>>  "dummy2", action=action at entry=0xe10d90 "monitor", 
>>  interval=10000)
>>>       at lrmd.c:1404
>>>   #10 0x000000000040614f in process_lrmd_rsc_cancel (client=0xe17290, 
> id=74, 
>>  request=0xe1be10) at lrmd.c:1468
>>>   #11 process_lrmd_message (client=client at entry=0xe17290, id=74, 
>>  request=request at entry=0xe1be10) at lrmd.c:1507
>>>   #12 0x0000000000402bac in lrmd_ipc_dispatch (c=0xe169c0, 
> data=<optimized 
>>  out>, size=361) at main.c:148
>>>   #13 0x00007fdd91e4d4d9 in qb_ipcs_dispatch_connection_request () from 
>>  /usr/lib/libqb.so.0
>>>   #14 0x00007fdd92bc409d in gio_read_socket (gio=<optimized out>, 
>>  condition=G_IO_IN, data=0xe158a8) at mainloop.c:437
>>>   #15 0x00007fdd920ebce5 in g_main_context_dispatch () from 
>>  /lib/x86_64-linux-gnu/libglib-2.0.so.0
>>>   ---Type <return> to continue, or q <return> to quit---
>>>   #16 0x00007fdd920ec048 in ?? () from 
> /lib/x86_64-linux-gnu/libglib-2.0.so.0
>>>   #17 0x00007fdd920ec30a in g_main_loop_run () from 
>>  /lib/x86_64-linux-gnu/libglib-2.0.so.0
>>>   #18 0x0000000000402774 in main (argc=<optimized out>, 
>>  argv=0x7fff22cac268) at main.c:344
>>> 
>>>   Best Regards,
>>>   Hideo Yamauchi.
>>> 
>>> 
>>>   ----- Original Message -----
>>>>   From: "renayama19661014 at ybb.ne.jp" 
>>  <renayama19661014 at ybb.ne.jp>
>>>>   To: Andrew Beekhof <andrew at beekhof.net>; The Pacemaker 
> cluster 
>>  resource manager <pacemaker at oss.clusterlabs.org>
>>>>   Cc: 
>>>>   Date: 2014/10/10, Fri 10:55
>>>>   Subject: Re: [Pacemaker] [Problem]When Pacemaker uses a new 
> version of 
>>  glib, g_source_remove fails.
>>>> 
>>>>   Hi Andrew,
>>>> 
>>>>   Okay!
>>>> 
>>>>   I test your patch.
>>>>   And I inform you of a result.
>>>> 
>>>>   Many thanks!
>>>>   Hideo Yamauchi.
>>>> 
>>>> 
>>>> 
>>>>   ----- Original Message -----
>>>>>   From: Andrew Beekhof <andrew at beekhof.net>
>>>>>   To: renayama19661014 at ybb.ne.jp; The Pacemaker cluster resource 
> 
>>  manager 
>>>>   <pacemaker at oss.clusterlabs.org>
>>>>>   Cc: 
>>>>>   Date: 2014/10/10, Fri 10:47
>>>>>   Subject: Re: [Pacemaker] [Problem]When Pacemaker uses a new 
> version 
>>  of 
>>>>   glib, g_source_remove fails.
>>>>> 
>>>>>   Perfect!
>>>>> 
>>>>>   Can you try this:
>>>>> 
>>>>>   diff --git a/lib/services/services.c b/lib/services/services.c
>>>>>   index 8590b56..cb0f0ae 100644
>>>>>   --- a/lib/services/services.c
>>>>>   +++ b/lib/services/services.c
>>>>>   @@ -417,6 +417,7 @@ services_action_kick(const char *name, 
> const 
>>  char 
>>>>   *action, 
>>>>>   int interval /* ms */
>>>>>        free(id);
>>>>> 
>>>>>        if (op == NULL) {
>>>>>   +        op->opaque->repeat_timer = 0;
>>>>>            return FALSE;
>>>>>        }
>>>>> 
>>>>>   @@ -425,6 +426,7 @@ services_action_kick(const char *name, 
> const 
>>  char 
>>>>   *action, 
>>>>>   int interval /* ms */
>>>>>        } else {
>>>>>            if (op->opaque->repeat_timer) {
>>>>>                g_source_remove(op->opaque->repeat_timer);
>>>>>   +            op->opaque->repeat_timer = 0;
>>>>>            }
>>>>>            recurring_action_timer(op);
>>>>>            return TRUE;
>>>>>   @@ -459,6 +461,7 @@ handle_duplicate_recurring(svc_action_t * 
> op, 
>>  void 
>>>>>   (*action_callback) (svc_actio
>>>>>            if (dup->pid != 0) {
>>>>>                if (op->opaque->repeat_timer) {
>>>>>                    
> g_source_remove(op->opaque->repeat_timer);
>>>>>   +                op->opaque->repeat_timer = 0;
>>>>>                }
>>>>>                recurring_action_timer(dup);
>>>>>            }
>>>>> 
>>>>> 
>>>>>   On 10 Oct 2014, at 12:16 pm, renayama19661014 at ybb.ne.jp wrote:
>>>>> 
>>>>>>     Hi Andrew,
>>>>>> 
>>>>>>     Setting of gdb of the Ubuntu environment does not yet go 
> well 
>>  and I 
>>>>   touch 
>>>>>   lrmd and cannot acquire trace.
>>>>>>     Please wait for this a little more.
>>>>>> 
>>>>>> 
>>>>>>     But.. I let lrmd terminate abnormally when 
> g_source_remove() 
>>  of 
>>>>>   cancel_recurring_action() returned FALSE.
>>>>>>     -----
>>>>>>     gboolean
>>>>>>     cancel_recurring_action(svc_action_t * op)
>>>>>>     {
>>>>>>        crm_info("Cancelling operation %s", 
> op->id);
>>>>>> 
>>>>>>        if (recurring_actions) {
>>>>>>            g_hash_table_remove(recurring_actions, 
> op->id);
>>>>>>        }
>>>>>> 
>>>>>>        if (op->opaque->repeat_timer) {
>>>>>>            if 
> (g_source_remove(op->opaque->repeat_timer) == 
>>  FALSE)  
>>>>   {
>>>>>>                    abort();
>>>>>>            }
>>>>>>     (snip)
>>>>>>     -------core----
>>>>>>     #0  0x00007f30aa60ff79 in __GI_raise (sig=sig at entry=6) 
> at 
>>>>>   ../nptl/sysdeps/unix/sysv/linux/raise.c:56
>>>>>> 
>>>>>>     56      ../nptl/sysdeps/unix/sysv/linux/raise.c: No such 
> file 
>>  or 
>>>>   directory.
>>>>>>     (gdb) where
>>>>>>     #0  0x00007f30aa60ff79 in __GI_raise (sig=sig at entry=6) 
> at 
>>>>>   ../nptl/sysdeps/unix/sysv/linux/raise.c:56
>>>>>>     #1  0x00007f30aa613388 in __GI_abort () at abort.c:89
>>>>>>     #2  0x00007f30aadcde77 in crm_abort 
>>  (file=file at entry=0x7f30aae0152b 
>>>>>   "logging.c", 
>>>>>>        function=function at entry=0x7f30aae028c0 
>>  <__FUNCTION__.23262> 
>>>>>   "crm_glib_handler", line=line at entry=73, 
>>>>>>        assert_condition=assert_condition at entry=0x19d2ad0 
>>  "Source ID 
>>>>   63 
>>>>>   was not found when attempting to remove it", 
>>  do_core=do_core at entry=1, 
>>>>>>        do_fork=<optimized out>, do_fork at entry=1) at 
>>  utils.c:1195
>>>>>>     #3  0x00007f30aadf5ca7 in crm_glib_handler 
>>  (log_domain=0x7f30aa35eb6e 
>>>>>   "GLib", flags=<optimized out>, 
>>>>>>        message=0x19d2ad0 "Source ID 63 was not found 
> when 
>>  attempting 
>>>>   to 
>>>>>   remove it", user_data=<optimized out>) at 
> logging.c:73
>>>>>>     #4  0x00007f30aa320ae1 in g_logv () from 
>>>>>   /lib/x86_64-linux-gnu/libglib-2.0.so.0
>>>>>>     #5  0x00007f30aa320d72 in g_log () from 
>>>>>   /lib/x86_64-linux-gnu/libglib-2.0.so.0
>>>>>>     #6  0x00007f30aa318c5c in g_source_remove () from 
>>>>>   /lib/x86_64-linux-gnu/libglib-2.0.so.0
>>>>>>     #7  0x00007f30aabb2b55 in cancel_recurring_action 
>>>>   (op=op at entry=0x19caa90) 
>>>>>   at services.c:363
>>>>>>     #8  0x00007f30aabb2bee in services_action_cancel 
>>>>   (name=name at entry=0x19d0530 
>>>>>   "dummy3", action=<optimized out>, 
>>>>   interval=interval at entry=10000)
>>>>>>        at services.c:385
>>>>>>     #9  0x000000000040405a in cancel_op 
>>  (rsc_id=rsc_id at entry=0x19d0530 
>>>>>   "dummy3", action=action at entry=0x19cec10 
>>  "monitor", 
>>>>>   interval=10000)
>>>>>>        at lrmd.c:1404
>>>>>>     #10 0x000000000040614f in process_lrmd_rsc_cancel 
>>  (client=0x19c8290, 
>>>>   id=74, 
>>>>>   request=0x19ca8a0) at lrmd.c:1468
>>>>>>     #11 process_lrmd_message (client=client at entry=0x19c8290, 
> 
>>  id=74, 
>>>>>   request=request at entry=0x19ca8a0) at lrmd.c:1507
>>>>>>     #12 0x0000000000402bac in lrmd_ipc_dispatch 
> (c=0x19c79c0, 
>>>>>   data=<optimized out>, size=361) at main.c:148
>>>>>>     #13 0x00007f30aa07b4d9 in 
> qb_ipcs_dispatch_connection_request 
>>  () from 
>>>>>   /usr/lib/libqb.so.0
>>>>>>     #14 0x00007f30aadf209d in gio_read_socket 
> (gio=<optimized 
>>  out>, 
>>>>>   condition=G_IO_IN, data=0x19c68a8) at mainloop.c:437
>>>>>>     #15 0x00007f30aa319ce5 in g_main_context_dispatch () 
> from 
>>>>>   /lib/x86_64-linux-gnu/libglib-2.0.so.0
>>>>>>     ---Type <return> to continue, or q <return> 
> to 
>>  quit---
>>>>>>     #16 0x00007f30aa31a048 in ?? () from 
>>>>   /lib/x86_64-linux-gnu/libglib-2.0.so.0
>>>>>>     #17 0x00007f30aa31a30a in g_main_loop_run () from 
>>>>>   /lib/x86_64-linux-gnu/libglib-2.0.so.0
>>>>>>     #18 0x0000000000402774 in main (argc=<optimized 
> out>, 
>>>>>   argv=0x7fffcdd90b88) at main.c:344
>>>>>>     ---------
>>>>>> 
>>>>>>     Best Regards,
>>>>>>     Hideo Yamauchi.
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>     ----- Original Message -----
>>>>>>>     From: "renayama19661014 at ybb.ne.jp" 
>>>>>   <renayama19661014 at ybb.ne.jp>
>>>>>>>     To: Andrew Beekhof <andrew at beekhof.net>
>>>>>>>     Cc: The Pacemaker cluster resource manager 
>>>>>   <pacemaker at oss.clusterlabs.org>
>>>>>>>     Date: 2014/10/7, Tue 11:15
>>>>>>>     Subject: Re: [Pacemaker] [Problem]When Pacemaker 
> uses a 
>>  new 
>>>>   version of 
>>>>>   glib, g_source_remove fails.
>>>>>>> 
>>>>>>>     Hi Andrew,
>>>>>>> 
>>>>>>>>     Not quite. Returning FALSE from the callback 
> also 
>>  removes the 
>>>>>   source from 
>>>>>>>     glib.
>>>>>>>>     So your test case effectively removes t1 twice: 
> once 
>>>>   implicitly by 
>>>>>>>     returning 
>>>>>>>>     FALSE in timer_func1() and then again explicitly 
> in 
>>>>   timer_func3()
>>>>>>> 
>>>>>>> 
>>>>>>>     Your opinion is right.
>>>>>>> 
>>>>>>> 
>>>>>>>     If Pacemaker repeats and does not remove the 
> resources 
>>  which timer 
>>>> 
>>>>>   concluded in 
>>>>>>>     FALSE, glib does not return the error.
>>>>>>> 
>>>>>>> 
>>>>>>>     Many Thanks,
>>>>>>>     Hideo Yamauchi.
>>>>>>> 
>>>>>>> 
>>>>>>>     ----- Original Message -----
>>>>>>>>     From: Andrew Beekhof <andrew at beekhof.net>
>>>>>>>>     To: renayama19661014 at ybb.ne.jp
>>>>>>>>     Cc: The Pacemaker cluster resource manager 
>>>>>>>     <pacemaker at oss.clusterlabs.org>
>>>>>>>>     Date: 2014/10/7, Tue 11:06
>>>>>>>>     Subject: Re: [Pacemaker] [Problem]When Pacemaker 
> uses 
>>  a new 
>>>>   version 
>>>>>   of 
>>>>>>>     glib, g_source_remove fails.
>>>>>>>> 
>>>>>>>> 
>>>>>>>>     On 7 Oct 2014, at 1:03 pm, 
> renayama19661014 at ybb.ne.jp 
>>  wrote:
>>>>>>>> 
>>>>>>>>>      Hi Andrew,
>>>>>>>>> 
>>>>>>>>>>>      These problems seem to be due to a 
>>  correction of 
>>>>   next 
>>>>>   glib 
>>>>>>>     somehow 
>>>>>>>>     or 
>>>>>>>>>>      other.
>>>>>>>>>>>       * 
>>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>> 
>>>> 
>> 
> https://github.com/GNOME/glib/commit/393503ba5bdc7c09cd46b716aaf3d2c63a6c7f9c
>>>>>>>>>>    
>>>>>>>>>>      The glib behaviour on unbuntu seems 
>>  reasonable, 
>>>>   removing 
>>>>>   a source 
>>>>>>>>     multiple times 
>>>>>>>>>>      IS a valid error.
>>>>>>>>>>      I need the stack trace to know 
> where/how 
>>  this 
>>>>   situation 
>>>>>   can occur 
>>>>>>>     in 
>>>>>>>>     pacemaker.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>      Pacemaker does not remove resources several 
> 
>>  times as far 
>>>>   as I 
>>>>> 
>>>>>>>     confirmed it.
>>>>>>>>>      In Ubuntu(glib2.40), an error occurs just 
> to 
>>  remove 
>>>>   resources 
>>>>>   first.
>>>>>>>> 
>>>>>>>>     Not quite. Returning FALSE from the callback 
> also 
>>  removes the 
>>>>>   source from 
>>>>>>>     glib.
>>>>>>>>     So your test case effectively removes t1 twice: 
> once 
>>>>   implicitly by 
>>>>>>>     returning 
>>>>>>>>     FALSE in timer_func1() and then again explicitly 
> in 
>>>>   timer_func3()
>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>      Confirmation and the deletion of resources 
> seem 
>>  to be 
>>>>>   necessary not to 
>>>>>>> 
>>>>>>>>     produce an error in Ubuntu.
>>>>>>>>>      And this works well in glib of RHEL6.x.(and 
> 
>>  RHEL7.0)
>>>>>>>>> 
>>>>>>>>>             if (g_main_context_find_source_by_id 
> 
>>  (NULL, t1) 
>>>>   != 
>>>>>   NULL) {
>>>>>>>>>                     g_source_remove(t1);
>>>>>>>>>             }
>>>>>>>>> 
>>>>>>>>>      I send it to you after acquiring stack 
> trace.
>>>>>>>>> 
>>>>>>>>>      Many Thanks!
>>>>>>>>>      Hideo Yamauchi.
>>>>>>>>> 
>>>>>>>>>      ----- Original Message -----
>>>>>>>>>>      From: Andrew Beekhof 
>>  <andrew at beekhof.net>
>>>>>>>>>>      To: renayama19661014 at ybb.ne.jp; The 
>>  Pacemaker 
>>>>   cluster 
>>>>>   resource 
>>>>>>>     manager 
>>>>>>>>     <pacemaker at oss.clusterlabs.org>
>>>>>>>>>>      Cc: 
>>>>>>>>>>      Date: 2014/10/7, Tue 09:44
>>>>>>>>>>      Subject: Re: [Pacemaker] [Problem]When 
>>  Pacemaker 
>>>>   uses a 
>>>>>   new 
>>>>>>>     version of 
>>>>>>>>     glib, g_source_remove fails.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>>      On 6 Oct 2014, at 4:09 pm, 
>>>>   renayama19661014 at ybb.ne.jp 
>>>>>   wrote:
>>>>>>>>>> 
>>>>>>>>>>>      Hi All,
>>>>>>>>>>> 
>>>>>>>>>>>      When I move the next sample in 
>>>>>   RHEL6.5(glib2-2.22.5-7.el6) and 
>>>>>>> 
>>>>>>>>>>      Ubuntu14.04(libglib2.0-0:amd64 
> 2.40.0-2), 
>>  movement 
>>>>   is 
>>>>>   different.
>>>>>>>>>>> 
>>>>>>>>>>>       * Sample : test2.c
>>>>>>>>>>>      {{{
>>>>>>>>>>>      #include <stdio.h>
>>>>>>>>>>>      #include <stdlib.h>
>>>>>>>>>>>      #include <glib.h>
>>>>>>>>>>>      #include <sys/times.h>
>>>>>>>>>>>      guint t1, t2, t3;
>>>>>>>>>>>      gboolean timer_func2(gpointer 
> data){
>>>>>>>>>>>              printf("TIMER 
>>>>   EXPIRE!2\n");
>>>>>>>>>>>              fflush(stdout);
>>>>>>>>>>>              return FALSE;
>>>>>>>>>>>      }
>>>>>>>>>>>      gboolean timer_func1(gpointer 
> data){
>>>>>>>>>>>              clock_t         ret;
>>>>>>>>>>>              struct tms buff;
>>>>>>>>>>> 
>>>>>>>>>>>              ret = times(&buff);
>>>>>>>>>>>              printf("TIMER EXPIRE!1 
> 
>>>>   %d\n", 
>>>>>>>     (int)ret);
>>>>>>>>>>>              fflush(stdout);
>>>>>>>>>>>              return FALSE;
>>>>>>>>>>>      }
>>>>>>>>>>>      gboolean timer_func3(gpointer 
> data){
>>>>>>>>>>>              printf("TIMER EXPIRE 
>>>>   3!\n");
>>>>>>>>>>>              fflush(stdout);
>>>>>>>>>>>              printf("remove 
>>>>   timer1!\n");
>>>>>>>>>>> 
>>>>>>>>>>>              fflush(stdout);
>>>>>>>>>>>              g_source_remove(t1);
>>>>>>>>>>>              printf("remove 
>>>>   timer2!\n");
>>>>>>>>>>>              fflush(stdout);
>>>>>>>>>>>              g_source_remove(t2);
>>>>>>>>>>>              printf("remove 
>>>>   timer3!\n");
>>>>>>>>>>>              fflush(stdout);
>>>>>>>>>>>              g_source_remove(t3);
>>>>>>>>>>>              return FALSE;
>>>>>>>>>>>      }
>>>>>>>>>>>      int main(int argc, char** argv){
>>>>>>>>>>>              GMainLoop *m;
>>>>>>>>>>>              clock_t         ret;
>>>>>>>>>>>              struct tms buff;
>>>>>>>>>>>              gint64 t;
>>>>>>>>>>>              m = g_main_new(FALSE);
>>>>>>>>>>>              t1 = g_timeout_add(1000, 
>>  timer_func1, 
>>>>   NULL);
>>>>>>>>>>>              t2 = g_timeout_add(60000, 
>>  timer_func2, 
>>>>   NULL);
>>>>>>>>>>>              t3 = g_timeout_add(5000, 
>>  timer_func3, 
>>>>   NULL);
>>>>>>>>>>>              ret = times(&buff);
>>>>>>>>>>>              printf("START! 
>>  %d\n", 
>>>>>   (int)ret);
>>>>>>>>>>>              g_main_run(m);
>>>>>>>>>>>      }
>>>>>>>>>>> 
>>>>>>>>>>>      }}}
>>>>>>>>>>>       * Result
>>>>>>>>>>>      ---- RHEL6.5(glib2-2.22.5-7.el6) 
> ---- 
>>>>>>>>>>>      [root at snmp1 ~]# ./test2
>>>>>>>>>>>      START! 429576012
>>>>>>>>>>>      TIMER EXPIRE!1 429576112
>>>>>>>>>>>      TIMER EXPIRE 3!
>>>>>>>>>>>      remove timer1!
>>>>>>>>>>>      remove timer2!
>>>>>>>>>>>      remove timer3!
>>>>>>>>>>> 
>>>>>>>>>>>      ---- Ubuntu14.04(libglib2.0-0:amd64 
> 
>>  2.40.0-2) 
>>>>   ----
>>>>>>>>>>>      root at a1be102:~# ./test2
>>>>>>>>>>>      START! 1718163089
>>>>>>>>>>>      TIMER EXPIRE!1 1718163189
>>>>>>>>>>>      TIMER EXPIRE 3!
>>>>>>>>>>>      remove timer1!
>>>>>>>>>>> 
>>>>>>>>>>>      (process:1410): GLib-CRITICAL **: 
> Source 
>>  ID 1 
>>>>   was not 
>>>>>   found 
>>>>>>>     when 
>>>>>>>>     attempting 
>>>>>>>>>>      to remove it
>>>>>>>>>>>      remove timer2!
>>>>>>>>>>>      remove timer3!
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>>      These problems seem to be due to a 
>>  correction of 
>>>>   next 
>>>>>   glib 
>>>>>>>     somehow 
>>>>>>>>     or 
>>>>>>>>>>      other.
>>>>>>>>>>>       * 
>>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>> 
>>>> 
>> 
> https://github.com/GNOME/glib/commit/393503ba5bdc7c09cd46b716aaf3d2c63a6c7f9c
>>>>>>>>>> 
>>>>>>>>>>      The glib behaviour on unbuntu seems 
>>  reasonable, 
>>>>   removing 
>>>>>   a source 
>>>>>>>>     multiple times 
>>>>>>>>>>      IS a valid error.
>>>>>>>>>>      I need the stack trace to know 
> where/how 
>>  this 
>>>>   situation 
>>>>>   can occur 
>>>>>>>     in 
>>>>>>>>     pacemaker.
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>>      In g_source_remove() until before 
>>  change, the 
>>>>>   deletion of the 
>>>>>>>     timer 
>>>>>>>>     which 
>>>>>>>>>>      practice completed is possible, but 
>>>>   g_source_remove() 
>>>>>   after the 
>>>>>>>     change 
>>>>>>>>     causes an 
>>>>>>>>>>      error.
>>>>>>>>>>> 
>>>>>>>>>>>      Under this influence, we get the 
>>  following crit 
>>>>   error 
>>>>>   in the 
>>>>>>>>     environment of 
>>>>>>>>>>      Pacemaker using a new version of glib.
>>>>>>>>>>> 
>>>>>>>>>>>      lrmd[1632]:    error: crm_abort: 
>>>>   crm_glib_handler: 
>>>>>   Forked 
>>>>>>>     child 
>>>>>>>>     1840 to 
>>>>>>>>>>>      record non-fatal assert at 
> logging.c:73 
>>  : Source 
>>>>   ID 
>>>>>   51 was not 
>>>>>>> 
>>>>>>>>     found when 
>>>>>>>>>>>      attempting to remove it
>>>>>>>>>>>      lrmd[1632]:    crit: 
> crm_glib_handler: 
>>  GLib: 
>>>>   Source 
>>>>>   ID 51 was 
>>>>>>>     not 
>>>>>>>>     found 
>>>>>>>>>>>      when attempting to remove it
>>>>>>>>>>> 
>>>>>>>>>>>      It seems that some kind of coping 
> is 
>>  necessary 
>>>>   in 
>>>>>   Pacemaker 
>>>>>>>     when I 
>>>>>>>>     think 
>>>>>>>>>>      about next.
>>>>>>>>>>>       * Distribution using a new version 
> of 
>>  glib 
>>>>   including 
>>>>>   Ubuntu.
>>>>>>>>>>>       * Version up of future glib of 
> RHEL.
>>>>>>>>>>> 
>>>>>>>>>>>      A similar problem is reported in 
> the ML.
>>>>>>>>>>>       * 
>>>>>>>>    
>>>>   
> http://www.gossamer-threads.com/lists/linuxha/pacemaker/91333#91333
>>>>>>>>>>>       * 
>>>>>>>    
>>  http://www.gossamer-threads.com/lists/linuxha/pacemaker/92408
>>>>>>>>>>> 
>>>>>>>>>>>      Best Regards,
>>>>>>>>>>>      Hideo Yamauchi.
>>>>>>>>>>> 
>>>>>>>>>>>      
>>  _______________________________________________
>>>>>>>>>>>      Pacemaker mailing list: 
>>>>   Pacemaker at oss.clusterlabs.org
>>>>>>>>>>>    
>>>>   http://oss.clusterlabs.org/mailman/listinfo/pacemaker
>>>>>>>>>>> 
>>>>>>>>>>>      Project Home: 
> http://www.clusterlabs.org
>>>>>>>>>>>      Getting started: 
>>>>>>>>    
>>  http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
>>>>>>>>>>>      Bugs: http://bugs.clusterlabs.org
>>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>>     _______________________________________________
>>>>>>>     Pacemaker mailing list: 
> Pacemaker at oss.clusterlabs.org
>>>>>>>    http://oss.clusterlabs.org/mailman/listinfo/pacemaker
>>>>>>> 
>>>>>>>     Project Home: http://www.clusterlabs.org
>>>>>>>     Getting started: 
>>>>>   http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
>>>>>>>     Bugs: http://bugs.clusterlabs.org
>>>>>>> 
>>>>>> 
>>>>>>     _______________________________________________
>>>>>>     Pacemaker mailing list: Pacemaker at oss.clusterlabs.org
>>>>>>    http://oss.clusterlabs.org/mailman/listinfo/pacemaker
>>>>>> 
>>>>>>     Project Home: http://www.clusterlabs.org
>>>>>>     Getting started: 
>>>>   http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
>>>>>>     Bugs: http://bugs.clusterlabs.org
>>>>> 
>>>> 
>>>>   _______________________________________________
>>>>   Pacemaker mailing list: Pacemaker at oss.clusterlabs.org
>>>>   http://oss.clusterlabs.org/mailman/listinfo/pacemaker
>>>> 
>>>>   Project Home: http://www.clusterlabs.org
>>>>   Getting started: 
>>  http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
>>>>   Bugs: http://bugs.clusterlabs.org
>>>> 
>>> 
>>>   _______________________________________________
>>>   Pacemaker mailing list: Pacemaker at oss.clusterlabs.org
>>>   http://oss.clusterlabs.org/mailman/listinfo/pacemaker
>>> 
>>>   Project Home: http://www.clusterlabs.org
>>>   Getting started: 
> http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
>>>   Bugs: http://bugs.clusterlabs.org
>> 
> 
> _______________________________________________
> Pacemaker mailing list: Pacemaker at oss.clusterlabs.org
> http://oss.clusterlabs.org/mailman/listinfo/pacemaker
> 
> Project Home: http://www.clusterlabs.org
> Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
> Bugs: http://bugs.clusterlabs.org
> 




More information about the Pacemaker mailing list