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 20:40:41 +0900

Hi.

> The best solution is to find out where the "worker" thread is calling
> ProgressEnd and change the code to stop this. Will be interesting to see
> what
> is happening.
I'll try.


> Doesn't hurt to add the code to avoid a divide by zero (in odd timing
> situations) either though.
Hiding problem is not a good idea.

Nori



2010年4月9日18:56 Jonathan Kinsey <address@hidden>:
> The best solution is to find out where the "worker" thread is calling
> ProgressEnd and change the code to stop this. Will be interesting to see
> what
> is happening.
>
> Doesn't hurt to add the code to avoid a divide by zero (in odd timing
> situations) either though.
>
> Jon
>
> On 09/04/2010 10:34, 保坂範行 wrote:
>>> 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 :
>>> 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.
>>
>>
>> _______________________________________________
>> 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]