Dario Gabriel LipicarandClaude Opus 4.8 7a7c97b4f7 fix(host): isolate each module subprocess + tie its lifetime to the daemon
logos_host now (1) calls setsid() at startup so each module subprocess leads its
own session/process group instead of inheriting the daemon's (which is in turn
the launcher's) — tearing the module tree down on shutdown, or any process-group
signal aimed at the daemon, no longer leaks into the launcher and kills the shell
driving it (a script's teardown step dies with exit -15 on Linux); and (2) ties
the worker's lifetime to the daemon via PR_SET_PDEATHSIG (Linux) + a portable
getppid() watchdog, so a worker never lingers as an orphan if the daemon crashes.
The daemon itself stays in the foreground / its launcher's group so systemd,
Docker, and shells keep managing it normally — only its workers detach. Graceful
shutdown is unchanged (daemon kills workers per-PID). Compares against the
daemon's actual pid (not pid 1) so a daemon that is itself PID 1 (a container) is
handled correctly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 16:54:09 -03:00
2026-06-17 13:36:50 -04:00
2026-06-17 13:36:50 -04:00

logos-module-loader-qt

Implementation of logos-module-loader contract, using Qt Plugins for loading modules.

logos-module-loader   (ModuleFormatLoader interface)
   └─ logos-module-loader-qt  <-- this repo
         consumed by logos-liblogos

What's here

The whole Qt-plugin mechanism, in two parts:

Artifact Side Sources Links
logos_module_loader_qt (static lib) parent qt_plugin_format_loader.{h,cpp} boost::dll, spdlog, the loader contract. Qt-free / SDK-free. Linked into logos_core.
logos_host_qt (binary) child host/ (logos_host, command_line_parser, module_initializer, qt_app, token_source) the full SDK stack + Qt + CLI11 + logos-module. Bundled by frontends.

The parent (QtPluginFormatLoader) only resolves the logos_host_qt binary path and builds its CLI arguments (--name, --path, --instance-persistence-path, --transport-set) — it is deliberately light so logos_core doesn't pull Qt or the SDK just to know how to launch a Qt-plugin module.

The child (logos_host_qt) loads a single Qt-plugin module in its own process: it reads its auth token from the channel its container designated via --token-source (default stdin — so the host depends on no container package), then loads the plugin and brings up LogosAPI.

A logos_hostlogos_host_qt compatibility symlink is installed so frontends keep working with either name.

Build & test

nix build .#logos-module-loader-qt              # lib + header + host binary
nix build .#checks.aarch64-linux.tests -L       # run the loader + token-source tests
S
Description
No description provided
Readme
235 KiB
Languages
C++ 72.4%
CMake 14.8%
Nix 12.8%