From nobody Sat Sep 05 15:44:45 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hcd1n6q8nz6qjpW for ; Sat, 05 Sep 2026 15:44:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hcd1n46lLz4CTf for ; Sat, 05 Sep 2026 15:44:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788623085; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=LHfKx+e9JxnJKY5fDKkPkQGuUvPofQMlD07FasH2bd4=; b=J6pNG5mto0SJjtCypBNsaFMSLhmOUc/qH0V06ZUcYOnjXOIOacEEALN7wllu272lUSr+/w kqP+FXP80z/XkMC9TeQQ2+agX6+NGzfSE1vEUvWUjtIfWnmfFX4LWEVJaBuYgkmajV08dv Oxo71OGY8AeqnXx/2+JMWqX4rD9/i4ygfaXr1RKSoPdUL123CMoYIPHctH4FPTH2lIpzBx B5dssoyHhLwTgWCQewaeWU0RieSjdBGf5wXkfW1ga/tYlIVc03RcGmXbORx9REMPSpBAsI GnW0GWi5S9hxrHEqutZRuqrW1SLQyfMn6jMcfbD3QsbzuI2IhzdA0qf8R8JfOw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788623085; a=rsa-sha256; cv=none; b=FoDIfvGmNyFZQUDvdtrd8eGPp+frJcPIKRhIn3uTvChVqh939jHdPYRTGmYDXYkIy0A6OU MblMsVDBrM9FhUErNCay4dr2kQ3oHHtRO8UFWFOxTQHsmxvGG5nomxzT1kYjSj051V67Qm mtyfyFewpEu1HUoFFcOTAeQRpuFhNlfrxjrcK+w9WuBc10IEBs6m4u7kayNzSgcQVXczeK dtCn6bUIvnOa8VoF8R1fZZvCUddMniFKrj19hQBM6xNJD7Nm0Hxz2niGO6Gr8UCA97YXdL 1cxw3URhDWir3+1VJqFcw7u1zXZocIf780PUqF6pQHgYNV76jf+ya0cKKxlZNA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788623085; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=LHfKx+e9JxnJKY5fDKkPkQGuUvPofQMlD07FasH2bd4=; b=pK99iufu4CgmsPdwwakVIGCl60bbnCBoX5jXJTUSGEQMth14m7m/YAFvLpODahDW3KEfPG tanGg/tRFKuEW46wIAVNTKtjkfoD5HmefnWqqLRWGgIZCSi0sx/79Un1GdvO3N01KyRt87 oLnA7oXirqCQoxw3YcFSryR8GuuOFSrHsE1WzFesyJFh4q3/WnRKc/x+LZpZnqlnYn5QGd oMJ9YPpHiSeGXE3OHndJmmW/DqYvMTAr3E61Nc5dR8mqbxxkBB5zEfNN1QCk0iIG8h33W0 G1/znv83YShYphTiEPQHDAqZn/gYxbcvsnlsu2l36XIh4CmlXel6F2Gyre+gQA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hcd1n2pWQzrkY for ; Sat, 05 Sep 2026 15:44:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 401e0 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 05 Sep 2026 15:44:45 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 7dfadd78ba3c - main - hastd: Add a stop control message List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7dfadd78ba3c4608c3631fb5008de77ea1e29e88 Auto-Submitted: auto-generated Date: Sat, 05 Sep 2026 15:44:45 +0000 Message-Id: <6a9c38ed.401e0.1b762227@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=7dfadd78ba3c4608c3631fb5008de77ea1e29e88 commit 7dfadd78ba3c4608c3631fb5008de77ea1e29e88 Author: Dag-Erling Smørgrav AuthorDate: 2026-09-05 15:44:09 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-09-05 15:44:35 +0000 hastd: Add a stop control message Add a stop control message which causes hastd to clean up and terminate. Reviewed by: kevans Differential Revision: https://reviews.freebsd.org/D59344 --- sbin/hastctl/hastctl.c | 14 ++++++++++++++ sbin/hastd/control.c | 17 +++++++++++++++++ sbin/hastd/hast.h | 1 + sbin/hastd/hastd.c | 12 ++++++++---- 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/sbin/hastctl/hastctl.c b/sbin/hastctl/hastctl.c index fe37dcaa1b58..229af1dae74d 100644 --- a/sbin/hastctl/hastctl.c +++ b/sbin/hastctl/hastctl.c @@ -59,6 +59,7 @@ enum { CMD_ROLE, CMD_STATUS, CMD_DUMP, + CMD_STOP, CMD_LIST }; @@ -430,6 +431,9 @@ main(int argc, char *argv[]) } else if (strcmp(argv[1], "dump") == 0) { cmd = CMD_DUMP; optstr = "c:dh"; + } else if (strcmp(argv[1], "stop") == 0) { + cmd = CMD_STOP; + optstr = "c:dh"; } else usage(); @@ -524,6 +528,13 @@ main(int argc, char *argv[]) nv_add_string(nv, argv[ii], "resource%d", ii); } break; + case CMD_STOP: + /* Stop hastd. */ + if (argc > 0) + usage(); + nv = nv_alloc(); + nv_add_uint8(nv, HASTCTL_CMD_STOP, "cmd"); + break; default: PJDLOG_ABORT("Impossible command!"); } @@ -574,6 +585,9 @@ main(int argc, char *argv[]) case CMD_STATUS: error = control_status(nv); break; + case CMD_STOP: + error = 0; + break; default: PJDLOG_ABORT("Impossible command!"); } diff --git a/sbin/hastd/control.c b/sbin/hastd/control.c index 0a9befcc4358..7b13cc71f2c9 100644 --- a/sbin/hastd/control.c +++ b/sbin/hastd/control.c @@ -300,6 +300,15 @@ control_status(struct hastd_config *cfg, struct nv *nvout, control_status_worker(res, nvout, no); } +static void +control_stop(struct hastd_config *cfg, struct nv *nvout) +{ + pjdlog_info("Stop message received."); + (void)cfg; + (void)nvout; + sigexit_received = true; +} + void control_handle(struct hastd_config *cfg) { @@ -341,6 +350,14 @@ control_handle(struct hastd_config *cfg) error = 0; + /* The stop command does not expect any arguments. */ + if (cmd == HASTCTL_CMD_STOP) { + control_stop(cfg, nvout); + if (nv_error(nvout) != 0) + goto close; + goto fail; + } + str = nv_get_string(nvin, "resource0"); if (str == NULL) { pjdlog_error("Control header is missing 'resource0' field."); diff --git a/sbin/hastd/hast.h b/sbin/hastd/hast.h index d0f9dd874c56..a91993fc398e 100644 --- a/sbin/hastd/hast.h +++ b/sbin/hastd/hast.h @@ -66,6 +66,7 @@ #define HASTCTL_CMD_UNKNOWN 0 #define HASTCTL_CMD_SETROLE 1 #define HASTCTL_CMD_STATUS 2 +#define HASTCTL_CMD_STOP 3 #define HAST_ROLE_UNDEF 0 #define HAST_ROLE_INIT 1 diff --git a/sbin/hastd/hastd.c b/sbin/hastd/hastd.c index c62b85fd1925..5d90ddc8aff9 100644 --- a/sbin/hastd/hastd.c +++ b/sbin/hastd/hastd.c @@ -724,7 +724,6 @@ terminate_workers(void) { struct hast_resource *res; - pjdlog_info("Termination signal received, exiting."); TAILQ_FOREACH(res, &cfg->hc_resources, hr_next) { if (res->hr_workerpid == 0) continue; @@ -1044,10 +1043,8 @@ check_signals(void) switch (signo) { case SIGINT: case SIGTERM: + pjdlog_info("Termination signal received."); sigexit_received = true; - terminate_workers(); - proto_close(cfg->hc_controlconn); - exit(EX_OK); break; case SIGCHLD: child_exit(); @@ -1077,6 +1074,8 @@ main_loop(void) for (;;) { check_signals(); + if (sigexit_received) + break; /* Setup descriptors for select(2). */ FD_ZERO(&rfds); @@ -1135,6 +1134,8 @@ main_loop(void) * info about terminated workers in the meantime. */ check_signals(); + if (sigexit_received) + break; if (FD_ISSET(proto_descriptor(cfg->hc_controlconn), &rfds)) control_handle(cfg); @@ -1170,6 +1171,9 @@ main_loop(void) } } } + terminate_workers(); + proto_close(cfg->hc_controlconn); + exit(EX_OK); } static void