NAS-141903 / 27.0.0-BETA.1 / Depend on openipmi explicitly (#19381)
## Problem
The IPMI plugin starts the `openipmi` systemd service on any system with
a real BMC (`ipmi.py` setup, gated on dmidecode `has-ipmi`), and that
unit — which loads the `ipmi_si`/`ipmi_devintf` kernel modules that
create `/dev/ipmi0` — is shipped by the Debian `openipmi` package. We
only declared `ipmitool` in Depends though, and openipmi rode in purely
as `ipmitool`'s `Recommends:`. Once truenas_build disabled
`install_recommends` by default, openipmi silently stopped being
installed, so on IPMI-capable hardware the service start fails,
`/dev/ipmi0` never appears, and all IPMI LAN/user configuration breaks.
## Solution
Add `openipmi` to middlewared's `Depends`. Same fix as the websockify
case — it's a genuine hard runtime dependency that was only surviving as
a recommend, so declaring it explicitly makes it independent of the
build's recommends setting.
webshell: fix sessions hanging with a blank terminal
login(1) hangs up and reopens its tty at session start, so reads on
the pty master transiently fail with EIO. The reader thread treated
any read error as fatal and exited silently: the UI showed
"connected" but the terminal stayed blank while the shell kept
running with nobody forwarding its output. Treat EIO as fatal only
when the shell child is gone (50ms retry, 5s cap).
Also harden the worker teardown:
- abort() closed master_fd while the reader/writer threads still
used the fd number; it now only signals and kills the child, and
run() reaps, joins, then closes under try/finally.
- terminate_pid(use_pgid=True) before the child's setsid() resolved
to middlewared's own process group and could kill the daemon;
signal the pid directly when the group is the caller's own.
- Bound every teardown wait: WNOHANG reap (D-state child), 30s
websocket send (stalled client). Catch BaseException so thread
[2 lines not shown]
NAS-141882 / 26.0.0-RC.1 / Fix `clear_sync_pending_zfs_keys` (#19362)
The bug — zfs_keys.py:164: clear_sync_pending_zfs_keys called
datastore.update('storage.encrypteddataset', {'kmip_uid': None}),
passing the update data dict into the id_or_filters position and leaving
the required data argument unfilled. Any dataset that still held a local
encryption_key triggered TypeError: DatastoreService.update() missing 1
required positional argument: 'data', which aborted the whole function —
so the sibling datastore.delete on line 167 never ran and orphan rows
were left behind.
NAS-141883 / 26.0.0-RC.1 / Fix KMIP in-memory cache being wiped after every push (#19363)
zfs_keys.py:102 (and the same in pull) — {k: v for k, v in
store.zfs_keys.items() if k in existing_datasets} compares dataset names
against a list of dicts, so it always evaluates false and wipes the
in-memory cache after every push. That's why kmip_sync_pending stays
true after a successful push, which is what forces several tests to use
force_clear.
NAS-141884 / 26.0.0-RC.1 / Fix `kmip_connection` error handling (#19364)
PyKMIP re-raises the bare ConnectionRefusedError, which isn't in the
caught tuple.
NAS-141908 / 27.0.0-BETA.1 / add --keep-refs to --dump-api (#19383)
This is needed for the MCP feature since they're using the dump-api
command to generate typescript interfaces from our json schemas. Should
be no change in functionality, just an extra argument.
[lldb] Synthesize data symbols for plain C globals on WebAssembly (#211301)
The Wasm name section names functions but not data, so LLDB recovers
data symbols from the DWARF. It only did so for variables with a linkage
name, such as a C++ vtable, so a plain C global, which has only a
DW_AT_name, got no symbol and its address did not resolve back to a
name. Use the source name when there is no linkage name.
[VPlan] Add createWiden{Load,Store} VPBuilder members (NFC) (#210543)
Add member functions to create wide load/store and migrate various sites
to use them.
It also updates makeMemOpWideningDecisions to use it. For consistency,
ReplaceWith has been updated to always require inserted recipes.
PR: https://github.com/llvm/llvm-project/pull/210543
webshell: fix silent reader/writer thread death and fd lifecycle
login(1) hangs up and reopens its tty at session start: pty_close()
of the vhangup'd slave sets TTY_OTHER_CLOSED on the master and wakes
its readers, so os.read() returned EIO until pty_open() cleared the
flag on reopen. The reader treated any read error as fatal and
exited; the shell kept running with no output forwarded. Treat
read/write EIO as fatal only when the child is gone; retry with 50ms
backoff.
abort() closed master_fd while the reader/writer threads still used
the fd number, so a recycled number (e.g. the next session's
forkpty) could receive their I/O. abort() now only signals and kills
the child; run() reaps it, joins both threads, then closes
master_fd. A post-fork check covers abort() racing the fork.
Catch BaseException in both threads: a BaseException propagated
through Future.result() (SystemExit, or asyncio.CancelledError via
asyncio's exception conversion) escaped except Exception, killing
[33 lines not shown]
[Matrix] Use incoming terminator as insert point in visitPHI. (#211211)
For some instructions, like invoke, getInsertionPointAfterDef may return
an std::nullopt. Using the insert point after the phi is then incorrect.
Use the incoming terminator as default insert point to fix a crash in
the added test cases.
PR: https://github.com/llvm/llvm-project/pull/211211
Revert "Make result variables obey their dynamic values in subsequent expressions" (#211321)
This reverts commit 8b9cce358bef26ae4cb9275dd6a43f903bafbaa0.
This causes failures running expressions that return ObjC types on
x86-64 macOS but not on arm64 macOS.
Reverting till I can figure out why that's happening.
[HLSL] Add IsMultiSampled HLSL resource attribute (#211125)
This PR completes the frontend work for adding the IsMultiSampled HLSL
resource attribute (addressing
https://github.com/llvm/llvm-project/issues/194933)
The DirectX and SPIR-V backend work will be completed alongside the
implementation Texture2DMS
(https://github.com/llvm/llvm-project/issues/194955) so that the
functionality can be exercised.
Assisted by: Claude Opus 4.8
[CIR] Generate cleanup region for loops when needed (#211158)
This adds support for generating a cleanup region in loops that declare
destructed variables in the loop condition. These variables need to be
destructed on a per-iteration basis, so it's not possible to have a
cleanup scope that properly encloses the variable without losing the
loop structure elements in the initial CIR representation.
The CFG flatteneing of these loops was added in a previous PR, and the
lowering to LLVM IR follows directly from the flattened form.
Assisted-by: Cursor / various models