Bulat Ziganshin wrote:
Hello glasgow-haskell-users,
i've looked for this bug in Trac but don't found anything. so:
startGUI action = runInBoundThread $ do
unsafeInitGUIForThreadedRTS
myThreadId = writeIORef guiThread
action = widgetShowAll
mainGUI
guiThread = unsafePerformIO$ newIORef$ error undefined GUI::guiThread
Later in the same thread i ask for myThreadId and get different value.
What does same thread mean? I'll risk a guess.
mainGUI is a safe foreign call that executes a loop on the C side;
all future actions that you see and consider to be in the same thread
are actually callbacks from C to Haskell. But in GHC's RTS, a new
Haskell thread is created for each such callback, with a new thread id.
So myThreadId returns varying numbers, leading to the effect that you
described.
So it's not a bug, although it should be better documented.
It's not possible for the RTS to track which Haskell thread a callback
was originally registered from (at best it could remember which thread
created the original wrapper), and in any case that thread may be dead
already, or running Haskell code at the time the callback comes, so I
think that the current behaviour is quite sane.
regards,
Bertram
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users