[Lazarus] Gtk2 division by 0 in themes fix

Mattias Gaertner nc-gaertnma at netcologne.de
Tue Jul 15 21:03:51 CEST 2008


On Tue, 15 Jul 2008 20:25:02 +0200
Vincent Snijders <vsnijders at quicknet.nl> wrote:

> Mattias Gaertner schreef:
> > On Tue, 15 Jul 2008 15:51:42 +0200
> > Ales Katona <almindor at gmail.com> wrote:
> > 
> >> I noticed you added a Set8087CW() to fix this problem, but it
> >> doesn't work for me, at least on amd64 with trackbar.
> >>
> >> I made a simple pure gtk+ C and pascal 1:1 program to test this
> >> and found out that setting $1332 or $133f doesn't help at all.
> >>
> >> Setting via math unit (SetExceptionMask(GetExceptionMask +
> >> exZeroDivide) however does fix it. It's good enough to do this
> >> around gtk_main() too it seems (for the trackbar at least).
> >>
> >> I think the best thing to do here is to use the Math unit functions
> >> and Set/Unset the exZeroDivide mask before/after gtk_main.
> >>
> >> Again, the Set8087CW change didn't fix it on amd64/gtk2 (and
> >> possibly introduced various issues for math users).
> > 
> > Thanks for the hint.
> > Changed in 15785.
> >
> 
> Does ut turn of exception for divide by zero completely or just
> before calling gtk code? IOW, does the following code in a
> TButton.OnClick event handler show the message?

No. Damn.

About 'before calling gtk':
The bug is triggered in a gtk event. There is no pascal code *before*.


>  If not, it might be
> worth to add this the list of 'incompatibilities'.
> 
> procedure TForm1.Button1Click(Sender: TObject);
> var x, y, z: single;
> begin
>    x := 3.0; y := 1.0;
>    try
>      z := (x - y ) / (y - 1.0);
>    except
>      ShowMessage('Exception occurred');
>    end;
> end;

Apparently there is a real div by zero error.

Mattias



More information about the Lazarus mailing list