Permalink
Switch branches/tags
Commits on Sep 15, 2012
  1. Completely fix deadlocks of Thread#raise

    In some cases, an exception isn't correctly raised by Thread#raise. If that is
    the case, Thread#join on that thread leads to the deadlock.
    
    Consider the following example:
    
      thread = Thread.new do
      end
      thread.raise(RuntimeError) # interrupts thread incorrectly
      begin
        thread.join # thread is dead, but thread.join never returns; deadlock
      rescue
      end
    
    There are two problems in the current code:
    
      1. raise_prim in Thread#raise isn't inside Rubinius.{lock,unlock}.
      2. The thread execution cleanup doesn't lock correctly.
    
    In the end, there should be only the following three good timings:
    
      Note: 'prepare' means 'prepare to raise the new thread from the main threaed'
    
                   Time
                   ------------------------------------------------------->
      main thread  prepare - wakeup |
      new thread                    | call (interrupted) | lock - cleanup
    
                   Time
                   ------------------------------------------------------->
      main thread       | prepare - wakeup |
      new thread   call |                  | lock - cleanup
    
                   Time
                   ------------------------------------------------------->
      main thread                        | prepare (no-op) - wakeup (no-op)
      new thread   call | lock - cleanup |
    
    To fix the two problems, this commit does the followings respectively:
    
      1. Put raise_prim in Thread#raise under Rubinius.{lock,unlock}.
      2. Introduce Rubinius.uninterrupted_lock and Rubinius.check_interrupts to
         make the thread execution cleanup correctly lock.
    committed Sep 4, 2012
Commits on Sep 13, 2012
  1. Added MRI Coverage module.

    brixen committed Sep 10, 2012
  2. Added internal coverage tool.

    brixen committed Sep 4, 2012
  3. Added tooling interpreter.

    brixen committed Sep 3, 2012
Commits on Sep 12, 2012
  1. Plug memory leak in fibers

    dbussink committed Sep 12, 2012
  2. Cleanup LLVM bits because it supports std::string too

    Also improves debug messages to include method name
    dbussink committed Sep 12, 2012
Commits on Sep 11, 2012
  1. Merge pull request #1896 from voxik/terminal-width-fallback

    Add terminel width fallback.
    dbussink committed Sep 11, 2012
  2. Add terminel width fallback.

    This provides fallback terminal width, in case there cannot be detected
    any.
    voxik committed Sep 11, 2012
  3. Merge pull request #1887 from ryoqun/thread-rubinius-lock

    Use Rubinius.lock instead of Channel
    dbussink committed Sep 11, 2012
Commits on Sep 10, 2012
  1. Make sure to reset root to NULL

    dbussink committed Sep 10, 2012
Commits on Sep 8, 2012
  1. Correct spelling mistake.

    Robert Gleeson committed Sep 8, 2012
Commits on Sep 7, 2012
  1. Merge pull request #1890 from tonysidaway/openbsd-build

    Openbsd build
    dbussink committed Sep 7, 2012
  2. Merge pull request #1891 from voxik/fix-rake-install

    Fix rake install
    dbussink committed Sep 7, 2012
Commits on Sep 6, 2012
  1. Accommodate iconv library versions that have function names of the fo…

    …rm libiconv_open, etc (OpenBSD)
    tonysidaway committed Sep 6, 2012
Commits on Sep 5, 2012
Commits on Sep 4, 2012
  1. Fix File.read benchmark

    dbussink committed Sep 4, 2012
  2. Support handling 64 bit timestamps on 32 bit machines

    This basically reimplements the logic in a way that I find much more
    understandable than the old code ported from MRI. This code is based on
    a combination of https://github.com/schwern/y2038 and the MRI source
    code, taking the most useful parts from both.
    
    Fixes #1842
    dbussink committed Sep 2, 2012
Commits on Sep 3, 2012
  1. Revert "Add a spec for dead lock by Thread#kill and sleep"

    This reverts commit de62854.
    committed Sep 3, 2012