Switch branches/tags
Commits on Nov 15, 2012
  1. Remove old tags for Rational and Complex specs

    ryoqun committed Nov 10, 2012
    The following commit moved some Rational and Complex specs. But didn't
    update spec tags. Just remove them bacause it's now passing:
      1779c73 Rational()/Complex() should be Kernel specs
Commits on Nov 14, 2012
  1. Merge pull request #2008 from jmstacey/documentation_update_dev_build

    dbussink committed Nov 14, 2012
    Document how to Build Rubinius for debugging purposes
Commits on Nov 13, 2012
  1. Fake out SIZEOF_BDIGITS properly like in 1.8 mode

    dbussink committed Nov 13, 2012
    SIZEOF_BDIGITS and RBIGNUM_LEN need to match up. Fixes a test failure in
  2. Merge pull request #2010 from kachick/fix/Range-first_accept_argument…

    Brian Ford
    Brian Ford committed Nov 13, 2012
    Range#first has different behavior with Range#begin from Ruby 1.9
  3. Fix Range#first on X19

    kachick committed Nov 13, 2012
    Range#first has different behavior with Range#begin from Ruby 1.9.
    It should return the first element, or the first n elements.
        range = 0..2
        range.begin    #=> 0
        range.begin(2) #=> ArgumentError
        range.first    #=> 0
        range.first(2) #=> [0, 1]
  4. Fixed String#<<

    kronos committed Nov 13, 2012
    Ensure that new string size and is less than INT32_MAX
    Before this commit code below fails with '[BUG: Invalid byte array size]'
    string = ""
    book = "So Long, and Thanks for All the Fish"
    30000000.times {|i| string << book }
Commits on Nov 12, 2012
  1. Spec for sprintf result.

    brixen committed Nov 12, 2012
Commits on Nov 11, 2012
  1. Merge pull request #2005 from kachick/fix/kernel-public_methods_inclu…

    dbussink committed Nov 11, 2012
    Kernel#public_methods contains protected methods
  2. Clear exception when using throw

    dbussink committed Nov 11, 2012
    Fixes #2001
  3. Fix Kernel#public_methods

    kachick committed Nov 11, 2012
    The return value of Kernel#public_methods contains protected methods.
        obj =
        class << obj
          def obj_public; end
          protected; def obj_protected; end
        p obj.public_methods.grep(/^obj_/).map(&:to_sym)
        # Before(invalid)
        #=> [:obj_public, :obj_protected]
        # After
        #=> [:obj_public]
Commits on Nov 10, 2012
  1. If we try to update a header and it fails we can retry

    dbussink committed Nov 10, 2012
    If we fail to update a header atomically and see an empty object header,
    that's a valid state. It could be that the header was used for something
    else before and isn't anymore, for example when it was thinly locked
    when trying to install an object id and unlocked when the header was
    Related to #1995
  2. No need to switch on meaning

    dbussink committed Nov 10, 2012
    In the past, inflated was also a meaning so we had to exclude that.
    Since we don't have that anymore, we don't have to guard this condition.
  3. Fix handle initialization setup

    dbussink committed Nov 10, 2012
    There was a race condition when we want to inflate an object header. The
    problem was occured when an object was thinly locked and then an object
    id needed to be stored too. In that case we need to inflate header.
    During this scenario, another thread actually unlocked the thinly locked
    object. This caused the atomic replacement in
    ObjectHeader::set_inflated_header to fail. This is exactly how it should
    The problem however is that when we attempt to set the inflated header a
    second time after the failed compare and swap, we don't reset the values
    derived from the original flags in the header. So the owner_id_ that was
    set during the first attempt, wasn't cleared on the second attempt.
    This meant that after a succesful second attempt of the compare and
    swap, the inflated header had an owner_id_ set, even though the second
    time the original object header was not thinly locked and had no owner
    This could cause deadlocks later on, because other threads would still
    see the object as locked, but since it wasn't, nothing every unlocked it
    This change makes sure we reset the additional properties we track in
    the inflated header each time we update the inflated header.
  4. Use enumeration type in the header

    dbussink committed Nov 10, 2012
    Creates nicer debugging output when printing an object header in GDB,
    showing the meaning directly instead of a magic constant.
        f = {
          inflated = 0,
          obj_type = rubinius::PackedObjectType,
          meaning = rubinius::eAuxWordLock,
          zone = rubinius::YoungObjectZone,
          age = 0,
          Forwarded = 0,
          Remember = 0,
          Marked = 0,
          InImmix = 0,
          Pinned = 0,
          Frozen = 0,
          Tainted = 0,
          Untrusted = 0,
          LockContended = 1,
          unused = 0,
          aux_word = 256
Commits on Nov 9, 2012