
That should have the same problem; the exceptions can't be delivered until the target thread reaches a yield. 'timeout' uses the same underlying mechanism. Obvious worrisome question: is it possible to use this to DoS lambdabot/mueval? Quoting Erik Hesselink (2018-11-29 05:15:49)
Hi Ryan, I'm not quite sure of your use case, but lambdabot/mueval do something like this I think. From a brief look at the source [1] it seems they compute in a separate thread, then in another thread, wait until the timeout then kill the computation thread. Would something like that work for you? Erik [1] [1]https://github.com/gwern/mueval/blob/09b6a7aa5a25c4115442ea2e6ae0c2d b557007f8/Mueval/Parallel.hs
On Thu, 29 Nov 2018 at 03:41, Ryan Reich <[2]ryan.reich@gmail.com> wrote:
I expected something like that. I'm all the way back in ghc-8.2.2, but I think what this really shows is that the flag is unreliable and version-dependent. Unfortunately there doesn't seem to be a precise specification of where yield points should appear, and therefore, where they might be not-omitted.
On Wed, Nov 28, 2018, 17:10 Viktor Dukhovni <[3]ietf-dane@dukhovni.org wrote:
On Wed, Nov 28, 2018 at 09:39:01AM -0800, Ryan Reich wrote: > Thanks for the suggestion, which Arjen made also.� Unfortunately, it does > not appear to help.� See this simple program: > > -- Loop.hs > import Control.Exception > import System.Timeout > > main :: IO (Maybe Integer) > main = timeout 100000 $ evaluate $ last $ repeat 0 > -- end > > With either GHC invocation "stack exec ghc Loop[ -- -fno-omit-yields]", > running ./Loop fails to terminate (it should do so in 0.1s). > > Based only on the very terse description of that flag in the User's Guide, > and its name, I think the problem is simply that GHC doesn't normally > *generate* yields in that loop, so there's nothing not to omit. It times out for me with GHC 8.4.4 on FreeBSD 11.2, and "ghc -O -fno-omit-yields" and does� not time out with "ghc -O": � � $ cat /tmp/foo.hs � � import Control.Exception � � import System.Timeout � � main :: IO (Maybe Integer) � � main = timeout 1000000 $ evaluate $ last $ repeat 0 � � $ ghc -O -fno-omit-yields /tmp/foo.hs � � [1 of 1] Compiling Main� � � � � � � ( /tmp/foo.hs, /tmp/foo.o ) [Optimisation flags changed] � � Linking /tmp/foo ... � � $ time /tmp/foo � � real� � 0m1.033s � � user� � 0m1.025s � � sys� � � 0m0.008s � � $ rm /tmp/foo � � $ ghc -O /tmp/foo.hs � � [1 of 1] Compiling Main� � � � � � � ( /tmp/foo.hs, /tmp/foo.o ) [Optimisation flags changed] � � Linking /tmp/foo ... � � $ time /tmp/foo � � ^C^C � � real� � 0m5.864s � � user� � 0m5.857s � � sys� � � 0m0.000s On MacOS X with GHC 7.10.3, it does not time out either way.� Perhaps some versions of GHC don't make the timeout possible. -- � � � � Viktor. _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: [4]http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: [5]http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
Verweise
1. https://github.com/gwern/mueval/blob/09b6a7aa5a25c4115442ea2e6ae0c2db557007f... 2. mailto:ryan.reich@gmail.com 3. mailto:ietf-dane@dukhovni.org 4. http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe 5. http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe