Skip to content

Release 3.16

Compare
Choose a tag to compare
@brixen brixen released this 25 Feb 17:21
· 1290 commits to master since this release

Version 3.16 (2016-02-25)

  • Omit [ skip ci ] from GitHub release notes. (Brian Shirai)
    Odd formatting necessary to avoid getting stripped for release notes.
  • Fix configure script to enable C++11 regardless of LLVM version. (Joe Eli McIlvain)
    The CodeDB work added C++11 usage into the VM source itself,
    but C++11 support was only enabled for LLVM >= 3.5,
    failing for users with lower supported LLVM versions.

Resolves #3622.

This is an explanation of the issue:
We already have A::B been autoloaded by the main thread. When c.rb (see
any of the previous links) is being autoloaded in another thread, class
A::B is being opened using Rubinius.open_class_under (through
Rubinius.open_class).
Since module A has an Autoload entry for B in its constant_table,
open_class_under tries to call #call on this Autload object, which returns nil
because #resolve returns false (CodeLoader.require returns false
if a feature is already been loaded).
With nil returned, open_class_under decided to create a new Class object
for B, which means the autoload entry it already had for :C is lost,
resulting in constant A::B::C not being found.

  • Revert "Consider an autoload resolved if #resolve didn't return nil in Autoload#call" (Ahmad Sherif)
    CodeLoader.require returning false doesn't necessarily mean the feature
    got loaded.

This reverts commit 01a7c2f.

  • Only build binaries for a specific Ubuntu version. (Brian Shirai)
  • Use dist version for docker deploy. (Brian Shirai)
  • Decouple linking for C-exts from clang/gcc. (Brian Shirai)
  • Updated Dockerfile for Ubuntu to include compiler. (Brian Shirai)
  • Fix a condition in utilities::logger::append_newline (Ahmad Sherif)
    The previous condition assumes enough space to append an extra newline
    followed by \0. If we already have a full message buffer, appending would
    overflow and the \0 would corrupt some adjacent variable. If this
    adjacent variable happens to be the guard from the calling function,
    it would be corrupted and fails to unlock its lock, causing other
    logging components to stuck forever waiting for that lock.
  • Use a clearer condition in utilities::logger::append_newline (Ahmad Sherif)
    Credits to @brixen, follow-up on 0b4b712.
  • Fixed setting release date when building from tarball. (Brian Shirai)
  • Trigger rubinius-build on deploy. (Brian Shirai)
  • Use a loop instead of recursion when processing a regex group (Ahmad Sherif)
    It can blow up the stack if too many characters are inside the group.