[Pacemaker] [Problem]When Pacemaker uses a new version of glib, g_source_remove fails.
renayama19661014 at ybb.ne.jp
renayama19661014 at ybb.ne.jp
Tue Oct 7 04:15:02 CEST 2014
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
>>>
>
More information about the Pacemaker
mailing list