Next stable release of 1.10 serie. 1.10.11 is the next stable release in the [long-term support (LTS) version][release_policy][release_policy] 1.10.x release series. The label "stable" means there are 1.10.x-based applications running in production for quite a while without known crashes, incorrect results or other showstopper bugs. This release introduces two improvements and resolves roughly 18 issues since the 1.10.10 version. [release_policy]: https://www.tarantool.io/en/doc/latest/release/legacy-policy/ [issues]: https://github.com/tarantool/tarantool/issues Tarantool 1.10.11 is backward compatible with Tarantool 1.9.x in binary data layout, client-server protocol and replication protocol. [Upgrade][upgrade] using the `box.schema.upgrade()` procedure to unlock all the new features of the 1.10.x series. [upgrade]: https://www.tarantool.io/en/doc/1.10/book/admin/upgrades/ * Introduced support for `LJ_DUALNUM` mode in `luajit-gdb.py` (gh-6224). * Fedora 34 builds are now supported. (gh-6074) * Fedora 28 and 29 builds are no longer supported. * **\[Breaking change\]** `fiber.wakeup()` in Lua and `fiber_wakeup()` in C became NOP on the currently running fiber. Previously they allowed to "ignore" the next yield or sleep, which resulted in unexpected spurious wake-ups. Calling these functions right before `fiber.create()` in Lua or `fiber_start()` in C could lead to a crash (in debug build) or undefined behaviour (in release build). (gh-6043) There was a single use case for the previous behaviour: rescheduling in the same event loop iteration, which is not the same as `fiber.sleep(0)` in Lua and `fiber_sleep(0)` in C. This could be done in the following way: in C: ```C fiber_wakeup(fiber_self()); fiber_yield(); ``` and in Lua: ```Lua fiber.self():wakeup() fiber.yield() ``` To get the same effect in C, one can now use `fiber_reschedule()`. In Lua it is now impossible to directly reschedule the current fiber in the same event loop iteration. There is a way to reschedule self through a second fiber, but we strongly discourage doing so: ```Lua -- don't use this code local self = fiber.self() fiber.new(function() self:wakeup() end) fiber.sleep(0) ``` * Fixed memory leak on each `box.on_commit()` and `box.on_rollback()` (gh-6025). * Fixed invalid results produced by `json` module's `encode` function when it was used from the Lua garbage collector. For instance, this could happen in functions used as `ffi.gc()`. (gh-6050) * Fixed a bug when iterators became invalid (up to crash) after schema change (gh-6147). * Fixed crash in case of reloading a compiled module when the new module lacks some of functions which were present in the former code. In turn this event triggers a fallback procedure where we restore old functions but instead of restoring each function we process a sole entry only leading to the crash later when these restored functions are called (gh-5968). * Fixed console client connection breakage if request times out (gh-6249). * Added missing broadcast to net.box.future:discard() so that now fibers waiting for a request result are woken up when the request is discarded (gh-6250). * Fix possible keys divergence during secondary index build which might lead to missing tuples in it (gh-6045). * Fix crash which may occur while switching read_only mode due to duplicating transaction in tx writer list (gh-5934). * Fixed a race between Vinyl garbage collection and compaction resulting in broken vylog and recovery (gh-5436). * Fix replication stopping occasionally with `ER_INVALID_MSGPACK` when replica is under high load (gh-4040). * Fixed optimization for single-char strings in `IR_BUFPUT` assembly routine. * Fixed slots alignment in `lj-stack` command output when `LJ_GC64` is enabled (gh-5876). * Fixed dummy frame unwinding in `lj-stack` command. * Fixed detection of inconsistent renames even in the presence of sunk values (gh-4252, gh-5049, gh-5118). * Fixed the order VM registers are allocated by LuaJIT frontend in case of `BC_ISGE` and `BC_ISGT` (gh-6227). * When error is raised during encoding call results, auxiliary lightuserdata value is not removed from the main Lua coroutine stack. Prior to the fix it leads to undefined behaviour during the next usage of this Lua coroutine (gh-4617). * Fixed Lua C API misuse, when the error is raised during call results encoding on unprotected coroutine and expected to be catched on the different one, that is protected (gh-6248). * Fixed possibility crash in case when trigger removes itself. Fixed possibility crash in case when someone destroy trigger, when it's yield (gh-6266).