Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Oct 05, 2012

  1. Dirkjan Bussink

    Make sure that we setup a barrier before installing the jitted code

    Also make sure we remove the setup call frame at the proper moment.
    dbussink authored
  2. Dirkjan Bussink

    Make sure the C-API handles are initialized before setting them

    dbussink authored
  3. Dirkjan Bussink

    Remove saved call frame after possible GC in JIT

    dbussink authored
  4. Dirkjan Bussink

    Setup memory barrier when installing handle

    dbussink authored
  5. Dirkjan Bussink

    Fix race condition when concurrently reading and modifying header

    This fixes a potential number of race conditions. The most problematic
    one is the following. If we are in the middle of inflating a header and
    concurrently reading another flag there's a potential problem. If we
    check the header status first and it's not inflated but then read the
    flags after it's inflated, the flags contain bogus information.
    
    We fix this by making sure we always first copy the header, then check
    inflation status and return this copy if it is not inflated. This means
    that the code can see slightly outdated information, but it can already
    handle that properly because this type of race could happen in other
    places too.
    
    We also change every modification of changing the flags to be atomic.
    This is necessary to prevent certain information from being lost. If we
    for example freeze an object while concurrently inflating the header, it
    could be that we set the frozen bit in the header after we already
    copied the flags into the inflated header. In that case setting the
    frozen status would be lost.
    
    This is not a huge problem, but the side effect is more problematic.
    Since we reuse the header space as the pointer to the inflated header,
    modifying a bit there would mean the inflated header would point at a
    totally different inflated header. This would mean the object would
    suddenly get a very different status.
    
    These changes are related to issue #1940. In this issue the behavior
    exposed itself as follows. The code resulted in a concurrent scenario
    where an object header was inflated while concurrently retrieving an
    instance variable. Because of this, the returned obj_type was the value
    of the bits inside the inflated header pointer:
    
    $2 = {
      <rubinius::ObjectHeader> = {
        header = {
          f = {
            inflated = 1,
            meaning = 0,
            obj_type = 217,
            zone = rubinius::UnspecifiedZone,
            age = 2,
            Forwarded = 1,
            Remember = 1,
            Marked = 1,
            InImmix = 0,
            Pinned = 0,
            Frozen = 0,
            Tainted = 1,
            Untrusted = 0,
            LockContended = 0,
            unused = 0,
            aux_word = 1
          },
          flags64 = 4312680137,
          all_flags = 0x1010e46c9
        },
        klass_ = 0x104a3ff90,
        ivars_ = 0x1a,
        __body__ = {0x0}
      }, <No data fields>}
    
    The value here is obj_type 217, which is actually an invalid value. What
    happens because of this is that the code in Object#get_ivar would see
    that obj_type. This resulted in it not recognizing it as a packed object
    and this not running the proper code to retrieve the instance variable.
    
    This resulted in a nil being returned as the instance variable instead
    of the actual instance variable and then resulted in a NoMethodError.
    dbussink authored
  6. Dirkjan Bussink

    Move header modifying methods into oop.cpp

    dbussink authored
  7. Dirkjan Bussink

    Wrap up all access to flag manipulation in methods

    dbussink authored

Oct 04, 2012

  1. Dirkjan Bussink

    Store the thread name in the managed thread

    This makes debugging somewhat easier when we deadlock because we can see
    which thread is actually problematic if we call methods on other running
    threads such as getting backtraces.
    dbussink authored
  2. Dirkjan Bussink

    Fix deadlock in starting a Thread

    When we create a new Thread object, it is allocated with a the
    initializion lock locked. This means that any other method can needs to
    grab this lock has to wait for the thread to be actually started.
    
    If a method such as getting a backtrace of the thread is called before
    the thread is scheduled to be started, it can deadlock because it can't
    grab the lock and if there is simultanous GC triggered.
    dbussink authored
  3. Dirkjan Bussink

    Fix deadlock in using -Xjit.sync when a GC is scheduled

    dbussink authored

Oct 03, 2012

  1. Brian Shirai

    Merge branch 'master' of github.com:rubinius/rubinius

    brixen authored
  2. Brian Shirai

    Cleaned up at_exit spec.

    brixen authored
  3. Brian Shirai

    Merge remote-tracking branch 'ConradIrwin/bug/at_exit_exceptions'

    brixen authored
  4. Brian Shirai

    Merge pull request #1898 from voxik/ignore-block-device-test

    Ignore block device test.
    brixen authored
  5. Brian Shirai

    Updated MSpec source to d2e7a635.

    brixen authored
  6. Brian Shirai

    Exclude Gemfile.lock when sync'ing from another repo.

    brixen authored
  7. Brian Shirai

    Merge pull request #1936 from ryoqun/raise-nil-false

    Correctly raise TypeError even if nil or false is given
    brixen authored
  8. Brian Shirai

    Merge pull request #1937 from voxik/install-manpages

    Install man pages.
    brixen authored
  9. Brian Shirai

    Put using namespace rbxti in the right place.

    brixen authored
  10. Brian Shirai

    Access SpecRunner exit status via a method call.

    brixen authored
  11. Ryo Onodera

    Correctly raise TypeError even if nil or false is given

    ryoqun authored
  12. Ryo Onodera

    Add specs for arguments of raise

    ryoqun authored
  13. Brian Shirai

    Changed configure --libdir to --appdir. Closes #1919.

    The --libdir option is retained for specifying where to put the Rubinius
    shared library. We don't build a shared or static library yet but we will
    when we have an embedding API.
    
    The --appdir option specifies where the application runtime and library
    files will be installed. The use of --libdir for this was misleading.
    brixen authored
  14. Brian Shirai

    Added --host option to configure. Closes #1929.

    brixen authored
  15. Brian Shirai

    Untangle initialization dependencies in configure.

    brixen authored
  16. Brian Shirai

    Added .gitignore for iconv C-ext.

    brixen authored
  17. Brian Shirai

    Silence iconv warning.

    brixen authored

Oct 02, 2012

  1. Dirkjan Bussink

    Trigger a wakeup after setting up the listening socket for the agent

    This fixes the problem on OS X where opening an agent console would just
    hang. Related to #1933.
    dbussink authored
  2. Vít Ondruch

    Install man pages.

    voxik authored
  3. Dirkjan Bussink

    Teach the JIT about fixnum_mul

    We have to work around a bug in LLVM here which makes smul.with.overflow
    not work correctly. It will not properly detect overflows if we use the
    i63 / i31 integer types as described here:
    
    http://llvm.org/bugs/show_bug.cgi?id=13991
    
    We work around it by do multiplication with overflow detection for i64
    and i32 which does work and manually do a bounds check for Fixnum::MIN
    and Fixnum::MAX.
    dbussink authored
  4. Dirkjan Bussink

    Teach the JIT about fixnum_compare and float_compare

    dbussink authored
  5. Dirkjan Bussink

    Use better descriptive name for comparison operations

    float_compare and fixnum_compare are actually the comparators for the
    Float#<=> and Fixnum#<=> behavior, so this name makes it less ambiguous
    what these wrappers are for.
    dbussink authored

Oct 01, 2012

  1. Dirkjan Bussink

    Don't shadow existing code variable

    dbussink authored
  2. Dirkjan Bussink

    Add missing file

    dbussink authored
  3. Dirkjan Bussink

    Pass down enclosing module when resolving autoload

    Fixes #1934
    dbussink authored
Something went wrong with that request. Please try again.