bug-gnubg
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-gnubg] Assertion fail with progress bar


From: 保坂範行
Subject: Re: [Bug-gnubg] Assertion fail with progress bar
Date: Fri, 9 Apr 2010 18:34:23 +0900

> Looks like ProgressEnd() is being called, probably in another thread.
I guess so too.
Only ProgressEnd changes iProgressMax.

But I do not think
> gdouble frac = (iMax == 0) ? 1 : (double)iValue / iMax;
is one of right ways to fix it.

I have not caught the thread yet, it is a right idea to keep another away
from calling ProgressEnd.

Since we wait thread completion. gnubg.c:5500
[code]
#if USE_MULTITHREAD
        ret = MT_WaitForTasks(Progress, 100, FALSE);
#else
        asyncRet = 0;
        fn(data);       /* Just call function in single threaded build */
        ret = asyncRet;
#endif

        ProgressEnd();

[end of code]


Nori

2010年4月9日17:18 Jonathan Kinsey <address@hidden>:
> Looks like ProgressEnd() is being called, probably in another thread.
> Changing
> GtkProgressValue to have something like:
>
> gdouble frac = (iMax == 0) ? 1 : (double)iValue / iMax;
>
> Jon
>
> On 09/04/2010 06:46, 保坂範行 wrote:
>> Hi.
>>
>> I see assertion fail when analysis of game/match done.
>> Such as
>> (gnubg:30806): Gtk-CRITICAL **: gtk_progress_set_percentage: assertion
>> `percentage>= 0 && percentage <= 1.0' failed
>>
>>
>> To find out, I inserted old printf as follow:
>>
>> gtkgame.c
>> extern void GTKProgressValue ( int iValue, int iMax )
>> {
>> gchar *gsz;
>> gdouble frac = 1.0 * iValue / (1.0 * iMax );
>> gsz = g_strdup_printf("%d/%d (%.0f%%)", iValue, iMax, 100 * frac);
>> gtk_progress_bar_set_text( GTK_PROGRESS_BAR( pwProgress ), gsz);
>> printf("%d, %d, %f\n", iValue, iMax, frac);
>> gtk_progress_bar_set_fraction( GTK_PROGRESS_BAR( pwProgress ), frac);
>> g_free(gsz);
>>
>> ProcessEvents();
>> }
>>
>>
>> And got:
>>
>> (Game over) analyse match
>> 1, 61, 0.016393
>> 3, 61, 0.049180
>> 6, 61, 0.098361
>> 9, 61, 0.147541
>> 12, 61, 0.196721
>> 15, 61, 0.245902
>> 19, 61, 0.311475
>> 28, 61, 0.459016
>> 43, 61, 0.704918
>> 47, 61, 0.770492
>> 49, 61, 0.803279
>> 51, 61, 0.836066
>> 53, 61, 0.868852
>> 55, 61, 0.901639
>> 57, 61, 0.934426
>> 60, 0, inf
>> (gnubg:30806): Gtk-CRITICAL **: gtk_progress_set_percentage: assertion
>> `percentage>= 0 && percentage <= 1.0' failed
>>
>>
>> This means GTKProgressValue got iMax =0.
>>
>> By using ddd/gdb, I found that it happend via
>>
>> static gboolean UpdateProgressBar(gpointer unused)
>> {
>> ProgressValue(MT_GetDoneTasks());
>> return TRUE;
>> }
>>
>> Some how iMax in ProgressValue has changed to 0.
>>
>>
>> Nori
>>
>>
>> _______________________________________________
>> Bug-gnubg mailing list
>> address@hidden
>> http://lists.gnu.org/mailman/listinfo/bug-gnubg
>>
>>
>
>
>
>
> ________________________________
> Get a free e-mail account with Hotmail. Sign-up now.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]