I'm by no means a Gtk2Hs developer, but this seems like a perfectly  
legitimate change. I find it very unlikely that any significant space  
leaks will arise from not evaluating a () value -- or even that a  
sufficiently large () thunk to worry about could ever realistically be  
built. It might even be worth looking for other occurrences of evalIO  
to see if they ought to be switched to evalLazyIO as well.

~d

Quoting Gabriel Gonzalez <gabriel...@gmail.com>:

> To all,
>
> This is my first posting to the gtk2hs-devel mailing list because I came
> across a bug that I think I've fixed, but I wasn't getting any response
> on the bug tracking website, so I wanted to run it by you guys before
> submitting a patch.  I listed the bug in question at:
>
> http://hackage.haskell.org/trac/gtk2hs/ticket/1212
>
> The gist of the bug is that signals that have the form Signal self (IO
> ()), such as buttonActivated will crash if you link a printf callback to
> them.
>
> The reason is because the printf function returns undefined in order to
> get around having to use the FlexibleInstances extension, but the gtk2hs
> callback evaluation uses rts_evalIO to evaluate the function and it
> evaluates the return value (undefined) to weak head normal form and crashes.
>
> I made a patched version of gtk2hs substituting in rts_evalLazyIO (see
> bug page for details) instead and this fixed the problem.  However, I
> don't know if this is an ideal solution since maybe it might lead to
> space leaks.  I was hoping you guys could comment on whether or not it's
> important to use the stricter rts_evalIO.
>
> There are two other possible solutions.
>
> One is to patch the printf code to use FlexibleInstances to prevent it
> from having to return undefined, but I don't think this is the correct
> solution since I don't see why gtk2hs would want to be strict in the
> return value in the first place since it doesn't seem to ever be used.
>
> Another solution comes from observing that sometimes printf's return
> value is handled gracefully by ghc, which you can sometimes get to
> return a GHC.Prim.Any, which can be safely evaluated.  I haven't yet
> figured out how it decides when to return an undefined or a
> GHC.Prim.Any, though.
>
> Gabriel Gonzalez
>
> ------------------------------------------------------------------------------
> WhatsUp Gold - Download Free Network Management Software
> The most intuitive, comprehensive, and cost-effective network
> management toolset available today.  Delivers lowest initial
> acquisition cost and overall TCO of any competing solution.
> http://p.sf.net/sfu/whatsupgold-sd
> _______________________________________________
> Gtk2hs-devel mailing list
> Gtk2hs-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel
>
>



------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Gtk2hs-devel mailing list
Gtk2hs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel

Reply via email to