IronRuby 4.0.1 fixes pipes and sockets on macOS, where Puma could not start,
IO#write_nonblock on sockets, which cut large responses short, and a SQLite crash on
Linux. All of them were found by @rubys while serving Rails
apps that Roundhouse transpiles to plain Ruby.
Download
Self-contained: unpack one and run ir.sh / ir.cmd, irb, igem. No .NET to install.
- Windows x64:
ironruby-4.0.1-win-x64.zip, with Windows Forms, WPF and
Samples\Notepad\notepad.cmd - Linux x64:
ironruby-4.0.1-linux-x64.tar.gz - macOS arm64:
ironruby-4.0.1-osx-arm64.tar.gz
SHA256SUMS lists the checksums.
Fixes
- Pipes to child processes work on macOS (#12). Backticks,
%x(),IO.popenand
Open3failed withErrno::EINVAL: IronRuby passed Linux's value ofO_CLOEXECto
pipe2, and macOS numbers the flag differently. On macOS,core/io/pipe_spec,
core/kernel/backtick_specandlibrary/open3now pass. - Socket addresses on macOS and the BSDs (#13). Every address the kernel returned
(getsockname,accept,recvfrom) raisedunknown address family: 528, because a BSD
sockaddrstarts with a length byte; Puma could not bind. On macOS, ruby/spec
library/socketerrors fall from 838 to 178. IO#write_nonblockon a socket returns what the kernel took (#14). It claimed the
whole string even when the kernel accepted only part of it, and the rest was lost: Puma
responses larger than the socket's send buffer arrived truncated, on Linux and macOS.
CI now checks that whatwrite_nonblockclaims is what the peer receives, on Linux and
Windows (#15); Winsock takes a non-blocking send whole or refuses it, so Windows did not
lose bytes.- SQLite no longer crashes on Linux once another library has loaded the system SQLite
(SQLitePCL.raw#682), libvips
through ruby-vips for one. SQLitePCLRaw'slibe_sqlite3.sois linked without
-Bsymbolic, so its calls into itself could bind to the other copy, and
SQLite3::Database.newsegfaulted. The Linux archive now carries alibe_sqlite3.so
built from the same SQLite 3.53.3 with the same compile options, linked-Bsymbolic.
The release build checks that SQLite reports the same version and options from both, and
that the rebuilt one still answers with the system'slibsqlite3preloaded. Windows and
macOS were not affected.
Linux and Windows behave as in 4.0.0 apart from #14. The full status is in the
README.
Also new
- Issues are open.
- The launch video
has music now, and plays inline in the README as a teaser.
Music in the launch video: Edvard Grieg, In the Hall of the Mountain King, played by the
Czech National Symphony Orchestra for Musopen; public domain, from
classicals.de.
What's Changed
- README: the launch video plays inline by @Largo in #10
- Launch video: In the Hall of the Mountain King by @Largo in #11
- IO#write_nonblock on a socket returns what the kernel took by @rubys in #14
- Socket: read a packed sockaddr's family where macOS and the BSDs keep it by @rubys in #13
- Process: O_CLOEXEC is 0x1000000 on macOS, so pipes to a child open there by @rubys in #12
- CI: write_nonblock on a socket claims only what the peer receives (#14) by @Largo in #15
- IronRuby 4.0.1 by @Largo in #16
New Contributors
Full Changelog: v4.0.0...v4.0.1