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

renayama19661014 at ybb.ne.jp renayama19661014 at ybb.ne.jp
Fri Oct 10 08:34:04 CEST 2014


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
> 



More information about the Pacemaker mailing list