# 2.11.9

Date: 2026-04-27
Tag: 2.11.9

## Overview

2.x is the old stable release series. Users are encouraged to update to the
latest 3.x release.

This is a bugfix release. It resolves 34 issues since the previous
version.

Please consider the full list of user-visible changes below.

## Compatibility

Tarantool 2.x and 3.x are compatible in terms of binary data layout,
client-server protocol, and replication protocol. This means that upgrades can
be performed with zero downtime for read requests and the order-of-network-lag
downtime for write requests.

Please follow the [upgrade procedure][upgrade] to plan your update actions.

[upgrade]: https://www.tarantool.io/en/doc/latest/book/admin/upgrades/

## Tools

Introduced the `misc.memprof.available` and `misc.sysprof.available` flags to
determine whether the corresponding profiler is available for the current
Tarantool build (gh-12215).

## Bugs fixed

### Core

* Fixed a bug when Tarantool could hang due to `box.watch` (gh-9632).
* Fixed a bug where `.xlog.inprogress` files were not automatically deleted
  during server startup when `wal_dir` was set to a non-default value (gh-12081).
* Introduced the new built-in system event `box.wal_error` that is broadcast
  whenever Tarantool fails to commit a transaction to the write-ahead log
  (gh-9405).
* Fixed a bug where a local space could not be truncated when the `_truncate`
  space was synchronous (gh-12585).

### Election
* The leader now resigns upon the first encounter with an `ER_WAL_IO` write
  error (gh-9399).

### LuaJIT

Backported patches from the vanilla LuaJIT trunk (gh-11691, gh-12134). The
following issues were fixed as part of this activity:

* Fixed incorrect emission of `IR_TBAR` on aarch64.
* Fixed stack overflow handling for trace exit.
* Fixed dangling `CType` references.
* Fixed VM state closure after early OOM.
* Fixed emission of `IR_MUL` on x86/x64.
* Fixed incorrect `stp`/`ldp` instructions fusion on aarch64.
* Fixed SCEV entry invalidation when returning to a lower frame.
* Fixed builds on macOS 15 / Clang 16.
* Fixed emission of `IR_HREFK` on aarch64.
* Added `ffi.abi("dualnum")`.
* Fixed stack checks in varargs calls in the GC64 build.
* Fixed stack checks in `pcall()`/`xpcall()` in the GC64 build.
* Fixed the allocation limit for the no-JIT build.
* Fixed handling of OOM errors on stack resizing in `coroutine.resume()` and
  `lua_checkstack()`.
* Fixed recording of loops with a `-0` step value or `NaN` control values.
* Fixed error reporting when an error occurs during error handling.
* Fixed a dangling reference for FFI callbacks.
* Fixed `BC_UNM` for a `-0` argument in dual-number mode.
* Fixed narrowing of unary minus in dual-number mode.
* Fixed recording of `string.byte()`, `string.sub()`, and `string.find()`.
* Fixed missing type conversion for `BC_FORI` slots in dual-number mode.
* Fixed various corner cases in VM events.
* Fixed constructor index resolution recording in the JIT compiler.
* Fixed a UBSan warning in `unpack()`.

### Datetime
* Fixed an assertion failure in an ambiguous case where both the day of year
  (`yday`, which implicitly defines the calendar month and month day) and the
  calendar month (without a month day) were defined in the date text. Such cases
  are now detected and an error is thrown (gh-11347).
* Fixed `tzoffset` calculations for cases such as `new({timestamp=x, tz='Zone'})`
  (gh-12412).
* Fixed inconsistency between dates produced by `new({tzoffset=x})`
  and `d:set({tzoffset=x})` where `d.tz ~= ''` comes before `set()`
  (gh-7680, gh-12416).
* Now `datetime.new()` and `datetime_object:set()`
  check that the timestamp value is within the valid range (gh-12147).
* Fixed timestamp type checking in `set()` (gh-12411).

For backward compatibility, the `compat.datetime_setfn_timestamp_type_check``
option has been introduced. It's disabled by default for now ('old' behaviour),
which means no type check is performed. The 'new' behavior (with type check)
is planned to become the default in version 4.x.
