[Pacemaker] [Problem]When Pacemaker uses a new version of glib, g_source_remove fails.
Andrew Beekhof
andrew at beekhof.net
Fri Oct 24 21:31:04 UTC 2014
done
> On 14 Oct 2014, at 10:45 am, renayama19661014 at ybb.ne.jp wrote:
>
> 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
>>
>
> _______________________________________________
> 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