JRuby 9.2.9.0 Released

Wednesday, October 30 2019

The JRuby community is pleased to announce the release of JRuby 9.2.9.0

JRuby 9.2.x is compatible with Ruby 2.5.x and stays in sync with C Ruby. As always there is a mix of miscellaneous fixes so be sure to read the issue list below. All users are encouraged to upgrade.

Ruby Standard Library

  • The Ruby Standard Library has been updated to Ruby 2.5.7. JRuby will now report this as our equivalent compatible Ruby version. (#5917)

  • RubyGems has been updated to version 2.7.10.

Security Updates

  • This release removes an exploitable version of JQuery used by the rdoc library. See https://www.ruby-lang.org/en/news/2019/08/28/multiple-jquery-vulnerabilities-in-rdoc/

Java Modules Support

  • Java modules are better supported in this release by checking for openness before attempting to reflect against classes from that module. This should reduce the number of module warnings on Java 9+ and make it easier to configure the JVM to open up appropriate modules and packages to JRuby applications. See also the .jruby.java_opts file below, which can help you manage module options. (#5841, 5832, #5843, #5855, #5860)

Java Launcher Improvements

  • JVM options can now be added to global or app-local .jruby.java_opts files and automatically processed by the JRuby launcher. See JRuby Java Options Files for more information. Note: This feature is not yet supported by the JRuby native launcher, installed by default in RVM. We will release an update to the native launcher soon. (#5824, #5826)

  • You can now pass --environment to the JRuby launcher to get a log of exactly how we will execute your application. (#5840)

  • JRuby’s dev mode (via the --dev flag) adds additional options for Java 9+ and the OpenJ9 JVM. On OpenJ9, the -Xquickstart and -Xshareclasses flags are passed via the OPENJ9_JAVA_OPTIONS environment variable. (#5831)

Memory Usage Reductions

  • Numerous changes in this release reduce the boot-time and run-time memory use of JRuby applications. (#5837, #5832, #5874, #5880, #5885)

Thread-safety Improvements

  • Lock interruptibility broken in JRuby 9.2.8 has now been fixed. (#5863, #5875, #5942)

Process.wait APIs are now interruptible

  • Threads calling Process.wait, waitall, or waitpid will use the pthread_kill native function to interrupt those operations. Previously these threads were not interruptible. (#1050, #5848)

Native FFI improvements

  • When running JRuby via the “complete” jar file, we must unpack our native FFI stub to an appropriate temporary location. If the default location we use (the host system’s default “temp” location) is not readable or does not allow executable code, we will present an informational error indicating how to correct the issue. (#1302)

  • This release also includes native support for DragonFly BSD. (#5768, #5828)

Time Zone Data

  • Time zone data has been updated to IANA 2019c. This update includes six years of timezone changes. (#5951)

Github Issues resolved for 9.2.9.0

  • #5951 - Update joda-time and joda-timezones to 2019c
  • #5950 - Update all jnr dependencies and joni.
  • #5943 - properly synchronize globalInlineCount
  • #5942 - Mutex fixes for interruptibility
  • #5940 - Improve how we acquire ThreadContext to eliminate null refs.
  • #5939 - Restructure indy-based math binding.
  • #5938 - regressed indy fixnum op with custom equality (==)
  • #5935 - TypeError: "warn" with subclass of String constructed from heredoc
  • #5934 - [fix] ensure that fnmatch pattern does not contain a NUL character
  • #5931 - [test] update MRI test suite from ruby_2_5
  • #5930 - dupImpl specializations
  • #5929 - NPE json nested-array regression
  • #5928 - faster unpack1
  • #5927 - Use new RubyStringBuilder.str api to create inspected string for Exception
  • #5926 - fix class nesting #5925
  • #5925 - Inner Java classes are nested recursively
  • #5923 - Exception inspect in wrong encoding
  • #5921 - Add native.popen option to disable native popen.
  • #5919 - Synchronize variable reification against real class.
  • #5917 - Update stdlib to 2.5.7.
  • #5915 - encoding parameter for Dir.open, Dir.new #3205 #4495
  • #5912 - Deadlock with puma on JRuby 9.2.8.0
  • #5910 - 'Cannot cast org.jruby.gen.RubyObject7 to org.jruby.gen.RubyObject4' errors
  • #5909 - Concurrent File#flock calls of the same file results in Errno::EINVAL exception on Windows
  • #5908 - Implement Java::JavaLang::Throwable#full_message
  • #5906 - Java::JavaLang::Throwable missing full_message method
  • #5903 - less locking in interpreter mode (due IRMethod)
  • #5902 - [fix] avoid locking on class/module creation
  • #5901 - singleton class initialization blocks threads
  • #5900 - reporting a better error when tmp doesn't work for temporary executables
  • #5898 - Enable recursive fd redirection for popen logic.
  • #5897 - Simplify and use static scope for local_variables.
  • #5893 - [fix] jit.excludes for block using class (and method) name
  • #5891 - Clean up some backref and lastline users.
  • #5889 - [feat] jit.exclude based on path/to/impl_file.rb
  • #5886 - Update types.conf from ffi/ffi
  • #5885 - Unable to call inherited instance method on Java class under OpenJDK 12
  • #5884 - frozen path helper
  • #5882 - Jruby crashes intermittently right before coverage generation
  • #5880 - attempt to share loader for JIT-ed classes
  • #5877 - make SecureRandom.rand public
  • #5875 - Mutex behavior mismatch with MRI since JRuby 9.2.8.0
  • #5874 - Reduce bytecode size from JIT
  • #5873 - Kernel#warn keyword handling differs from CRuby
  • #5872 - Old version of jQuery is present in the JRuby builds
  • #5871 - Use Java 8 stack walker when full trace is requested.
  • #5870 - respect jit.max to stop compilation
  • #5869 - ArrayIndexOutOfBoundsException when using TracePoint
  • #5866 - Test passing control between two threads in the ConditionVariable spec
  • #5865 - Kernel#system fails with out: $stdout
  • #5864 - Illegal Reflective Access Operation Warning
  • #5863 - ConditionVariable#wait causes thread to wait forever in 9.2.8.0
  • #5860 - automatic-module-name
  • #5859 - Invalid `Tracepoint` Behavior for Blocks
  • #5858 - update joda time to 2.10.3
  • #5855 - Issues using bundle plugin with Java modules
  • #5854 - Implement IO#pread and pwrite.
  • #5853 - `slice_after` does not work on lazy Enumerators
  • #5852 - Return from block broken in 9.2.8.0
  • #5851 - Improvements to backtrace
  • #5850 - Fix tracer.rb and get it running in CI
  • #5849 - Top frame from interpreter gets wrong filename
  • #5848 - Wrap Process.wait* calls with pthread_kill logic.
  • #5845 - Propagate interrupt after interrupted sleep loop.
  • #5843 - Move all JI setAccessible to trySetAccessible.
  • #5841 - Can't call methods of private subclasses with java_method in java 12
  • #5840 - Consistently resolve path of jruby.bash
  • #5837 - Tweaks to reduce memory use of short commands
  • #5835 - Fail gracefully when inner class const_missing finds nothing
  • #5834 - enumerator review for better compatibility
  • #5832 - Reduce overhead of binding Java classes and methods
  • #5831 - Further improvements to dev mode
  • #5830 - aligned (and faster) uniq impls + less wrapping
  • #5829 - Actually release Windows for_fd fixes
  • #5828 - Identify DragonFlyBSD as a platform
  • #5826 - Add support for .jruby.java_opts home and cwd files
  • #5824 - Provide better documentation on java command @file support
  • #5816 - IO#pread and pwrite missing
  • #5768 - Support for DragonFly BSD
  • #5744 - first stab at a spec
  • #5722 - use same parameter for DNS.allocate_request_id/free_request_id to fix leak
  • #5700 - [ji] align Java array (with post 1.8 conventions)
  • #5127 - system() does not return boolean when Dir.pwd is uri:classloader
  • #4495 - Dir.open missing optional second keyword argument
  • #1302 - JRuby fails to load FFI support with obscure error when /tmp is not writable
  • #1050 - Timeout::timeout not throwing exception when timeout period reaches