1. 28 Jan, 2003 2 commits
  2. 27 Jan, 2003 3 commits
  3. 26 Jan, 2003 1 commit
  4. 25 Jan, 2003 1 commit
    • wolfgang's avatar
      [project @ 2003-01-25 15:54:48 by wolfgang] · af136096
      wolfgang authored
      This commit fixes many bugs and limitations in the threaded RTS.
      There are still some issues remaining, though.
      
      The following bugs should have been fixed:
      
      - [+] "safe" calls could cause crashes
      - [+] yieldToReturningWorker/grabReturnCapability
          -     It used to deadlock.
      - [+] couldn't wake blocked workers
          -     Calls into the RTS could go unanswered for a long time, and
                that includes ordinary callbacks in some circumstances.
      - [+] couldn't block on an MVar and expect to be woken up by a signal
            handler
          -     Depending on the exact situation, the RTS shut down or
                blocked forever and ignored the signal.
      - [+] The locking scheme in RtsAPI.c didn't work
      - [+] run_thread label in wrong place (schedule())
      - [+] Deadlock in GHC.Handle
          -     if a signal arrived at the wrong time, an mvar was never
                filled again
      - [+] Signals delivered to the "wrong" thread were ignored or handled
            too late.
      
      Issues:
      *) If GC can move TSO objects (I don't know - can it?), then ghci
      will occasionally crash when calling foreign functions, because the
      parameters are stored on the TSO stack.
      
      *) There is still a race condition lurking in the code
      (both threaded and non-threaded RTS are affected):
      If a signal arrives after the check for pending signals in
      schedule(), but before the call to select() in awaitEvent(),
      select() will be called anyway. The signal handler will be
      executed much later than expected.
      
      *) For Win32, GHC doesn't yet support non-blocking IO, so while a
      thread is waiting for IO, no call-ins can happen. If the RTS is
      blocked in awaitEvent, it uses a polling loop on Win32, so call-ins
      should work (although the polling loop looks ugly).
      
      *) Deadlock detection is disabled for the threaded rts, because I
      don't know how to do it properly in the presence of foreign call-ins
      from foreign threads.
      This causes the tests conc031, conc033 and conc034 to fail.
      
      *) "safe" is currently treated as "threadsafe". Implementing "safe" in
      a way that blocks other Haskell threads is more difficult than was
      thought at first. I think it could be done with a few additional lines
      of code, but personally, I'm strongly in favour of abolishing the
      distinction.
      
      *) Running finalizers at program termination is inefficient - there
      are two OS threads passing messages back and forth for every finalizer
      that is run. Also (just as in the non-threaded case) the finalizers
      are run in parallel to any remaining haskell threads and to any
      foreign call-ins that might still happen.
      af136096
  5. 24 Jan, 2003 4 commits
    • simonmar's avatar
      [project @ 2003-01-24 16:05:57 by simonmar] · be659293
      simonmar authored
      remove setting of $(way_) and $(_way); these are now set in boilerplate.mk
      be659293
    • simonmar's avatar
      [project @ 2003-01-24 14:04:40 by simonmar] · b429adbb
      simonmar authored
      - Generalise seq to allow an unlifted type in its second argument.  This
        works because seq is *always* inlined and replaced by a case.
      
      - Remove getTag, a wired-in Id with an unfolding, with a definition
        in GHC.Base:
      
      	getTag x = x `seq` dataToTag# x
      
        this is why we required the above generalisation to seq (dataToTag#
        returns an Int#).  See the comments in GHC.Base for more details.
      
      - As a side-effect, this fixes a bug in the interpreter, where the
        compiler optimised away the evaluation of the argument to dataToTag#,
        but the interpreter ended up passing it an unevaluated thunk (nullary
        constructors aren't always evaluated in GHCi, but the simplifier
        assumes they are).  Now, in the interpreter, getTag won't be inlined
        so the compiler can't optimise away the evaluation, and we're saved.
      
        The real bug here is either (a) dataToTag# requires an evaluated
        argument or (b) the interpreter doesn't supply it with one, take your
        pick.
      b429adbb
    • simonmar's avatar
      [project @ 2003-01-24 13:56:45 by simonmar] · 519c3db4
      simonmar authored
      - Reverse the code for workers and wrappers for nullary constructors.
        For some reason it was the wrong way around, but the effects were
        harmless since they both evaluate to the same thing.
      
      - When passing a nullary constructor as an argument, we should pass
        the name of the worker rather than the wrapper.  Again, this is
        mostly harmless, but it enables some small simplification in
        pushAtom.
      
      - Rearrange/cleanup pushAtom.
      519c3db4
    • simonpj's avatar
      [project @ 2003-01-24 11:26:39 by simonpj] · 9ceeb6e5
      simonpj authored
      Perform 'tidying' on the implicit bindings before emitting
      	External Core.  We were getting silly bindings like
      		\ tpl -> case tpl of tpl -> (tpl,tpl) -> tpl
      
      	Maybe we should add these implicit bindings in CoreTidy,
      	rather than in both MkExternalCore and CorePrep?
      9ceeb6e5
  6. 23 Jan, 2003 12 commits
  7. 20 Jan, 2003 1 commit
    • simonpj's avatar
      [project @ 2003-01-20 16:24:51 by simonpj] · 9208de5c
      simonpj authored
      Increase the size of a string literal; cures a simplifier loop
          when an application (f "x") appeared to have size 1, and so was
          inlined repeatedly.  The problem was that "x" appeared to have
          size 0.
      9208de5c
  8. 19 Jan, 2003 1 commit
  9. 17 Jan, 2003 3 commits
  10. 14 Jan, 2003 3 commits
  11. 13 Jan, 2003 8 commits
    • simonpj's avatar
      [project @ 2003-01-13 17:01:22 by simonpj] · 0877011a
      simonpj authored
      ------------------------------------
      	(a) Improve reporting of staging errors
      	(b) Tidy up the construction of dict funs
      			and default methods
      	------------------------------------
      0877011a
    • simonpj's avatar
      [project @ 2003-01-13 14:12:31 by simonpj] · 61d8dc50
      simonpj authored
      Bale out earlier if main is not in scope (fixes several test failures)
      61d8dc50
    • simonmar's avatar
      [project @ 2003-01-13 14:02:07 by simonmar] · 732cf22e
      simonmar authored
      The hook NoRunnableThreads() is not used; kill it.
      732cf22e
    • simonpj's avatar
      [project @ 2003-01-13 13:39:34 by simonpj] · a7c1d388
      simonpj authored
      wibble
      a7c1d388
    • simonpj's avatar
      [project @ 2003-01-13 13:22:58 by simonpj] · 96b7249d
      simonpj authored
      Comment
      96b7249d
    • simonpj's avatar
      [project @ 2003-01-13 13:20:37 by simonpj] · 90bf3139
      simonpj authored
      --------------------------------
      	Don't export the inlining for a foreign
      	import that has a #include directive
      	--------------------------------
      
      Reason for this change: if the inlining is imported into another
      module, the latter may not have the right #include directives.
      
      Also add notes to the documentation to explain the issues.
      90bf3139
    • simonpj's avatar
      [project @ 2003-01-13 13:19:25 by simonpj] · 67398e1b
      simonpj authored
      ------------------------------------
      	Type signature for derived con2tag
      	------------------------------------
      
      		MERGE TO STABLE
      
      The derived con2tag didn't have a type signature, so we got
      
      	con2tagFoo :: a -> Int#
      	con2tagFoo = \x -> getTag x
      
      The getTag generates a case expression, so we get a polymorphic
      case.  The polymorphic case simply does not work in *interpreted*
      GHC 5.02.3 and as a result neither does con2tag.  Alas.
      
      This commit fixes the problem, by giving a type signature for
      con2TagFoo.  But note that getTag in interpreted GHC 5.02 will continue
      to fail if used in a polymorphic context.  This problem does not arise
      in the HEAD (eval/apply) so I'm going to leave it as a wont-fix bug.
      67398e1b
    • simonpj's avatar
      [project @ 2003-01-13 13:10:19 by simonpj] · 0862ecec
      simonpj authored
      Import trimming
      0862ecec
  12. 10 Jan, 2003 1 commit