Commits on Sep 2, 2012
  1. Fix timing issue of Thread#kill and sleep

    In some cases, a thread isn't correctly killed by Thread#kill. If that is the
    case, Thread#join on that thread leads to the deadlock.
    Consider the following example:
        thread = do
        thread.kill # actually, don't kill
        thread.join # thread lives forever; deadlock
    Thread#kill does 2 things to kill a thread:
        1. prepares the thread to be terminated and
        2. wakes up the thread.
    Most of time, the wake-up is executed after the sleep in the killed thread.
    However, it is possible the wake-up is executed BEFORE the sleep in some rare
    cases. If that is the case, the wake-up does nothing because the thread is
    still waking up at that time. Then, the thread begins to sleep forever. As a
    result, Thread#join never returns.
    To avoid such a deadlock, Thread#sleep must check to terminate or not before
    actually sleeping. In addition, it must be asssured that the wake-up isn't
    executed AFTER the check BEFORE the sleep.
    The follwing diagrams illustrate the good and bad timings.
    Good timings:
        main thread  prepare - wakeup (no-op) |
        new thread                            | check - no sleep - terminate
        main thread                | prepare - wake-up |
        new thread   check - sleep |                   | terminate
        main thread        | prepare |       | wake-up |
        new thread   check |         | sleep |         | terminate
    Bad timing:
        main thread        | prepare - wake-up (no-op) |
        new thread   check |                           | sleep forever
    To fix the deadlock, this commit makes check_async be called before sleeping
    inside the park mutex.
    committed Sep 2, 2012
Commits on Aug 30, 2012
  1. Renamed VMMethod to MachineCode.

    This was a difficult name choice but it is consistent with CompiledCode
    and (not yet used) SourceCode. The CompiledCode is an abstraction of
    computation that is the focal point around which much revolves. MachineCode
    is a representation of computation specialized for our (virtual) machine.
    While there is possible ambiguity against the idea of JIT'd machine code,
    our MachineCode is a proper data structure, not just the format of bits
    resulting from the JIT compilation process. Also, our MachineCode is properly
    scoped differently than any such class/concept in LLVM (or more generally,
    the JIT).
    Regarding naming of instances of MachineCode, the following rationale is used:
    * parameters/variables have been named 'mcode' since the use of the variable
      is elaborated by the surrounding code (ie making ambiguity less an issue)
      and long variable names can sometimes make code unweildy.
    * attributes/fields/accessors have been name 'machine_code' because they have
      less context to disambiguate.
    brixen committed Aug 28, 2012
  2. Implement rb_iter_break()

    dbussink committed Aug 30, 2012
  3. Add specs for rb_iter_break

    dbussink committed Aug 30, 2012
Commits on Aug 29, 2012
  1. Add specs for rb_catch

    dbussink committed Aug 29, 2012
Commits on Aug 27, 2012
  1. Merge pull request #1879 from r-stu31/configure_flags

    configure: add CPPFLAGS and LDFLAGS where missing
    Brian Ford committed Aug 27, 2012
  2. Use CPPFLAGS and LDFLAGS when checking libraries, after all, they are…

    … also used afterwards for the real compilation and linking.
    r-stu31 committed Aug 27, 2012
  3. Merge pull request #1875 from LTe/random_range

    Random with range
    dbussink committed Aug 27, 2012
Commits on Aug 26, 2012
  1. Merge pull request #1878 from robgleeson/59b878bb9a1acdab0055a83887c1…

    Expand "~" from File.absolute_path properly.
    Robert Gleeson committed Aug 26, 2012
  2. Add spec for receiving '~user' in File.absolute_path.

    Robert Gleeson committed Aug 26, 2012
  3. Add failing spec for #1877.

    Robert Gleeson committed Aug 26, 2012
  4. Expand "~" from File.absolute_path properly.

    Fixes #1877.
    Robert Gleeson committed Aug 26, 2012
  5. Add specs for sorting shifted arrays

    This verifies that sorting still works if implementations use internal
    offsets for arrays.
    dbussink committed Aug 26, 2012
Commits on Aug 25, 2012
Commits on Aug 24, 2012
Commits on Aug 23, 2012
  1. Add tag for failing spec

    IPGlider committed Aug 23, 2012
  2. Duplicate the spec for diferent ruby versions

    This spec returns 4 on MRI 1.8.7p358 and 2 on MRI 1.9.3p194.
    IPGlider committed Aug 23, 2012