File 0369-erts-Make-emulator-terminate-if-erlsrv-does-windows.patch of Package erlang
From cecfda89c486bc76720f0998b860f0faa6553553 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Thu, 4 Feb 2021 13:18:35 +0100
Subject: [PATCH] erts: Make emulator terminate if erlsrv does (windows)
by creating and assigning a job object to erlsrv which will
be inherited by all child processes.
---
erts/etc/win32/erlsrv/erlsrv_service.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/erts/etc/win32/erlsrv/erlsrv_service.c b/erts/etc/win32/erlsrv/erlsrv_service.c
index f5d5c0b174..47b9c72690 100644
--- a/erts/etc/win32/erlsrv/erlsrv_service.c
+++ b/erts/etc/win32/erlsrv/erlsrv_service.c
@@ -525,6 +525,28 @@ static BOOL start_a_service(ServerInfo *srvi){
new_acl(&save_acl);
+ {
+ BOOL bIsProcessInJob;
+ if (!IsProcessInJob(GetCurrentProcess(), NULL, &bIsProcessInJob)) {
+ log_error(L"IsProcessInJob failed");
+ return FALSE;
+ }
+ if (!bIsProcessInJob) {
+ HANDLE hJob = CreateJobObject(NULL, NULL);
+ JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 };
+ /*
+ * Causes all processes associated with the job to terminate when the
+ * last handle to the job is closed.
+ */
+ jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
+ SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, &jeli, sizeof(jeli));
+ if (AssignProcessToJobObject(hJob, GetCurrentProcess()) == FALSE) {
+ log_error(L"Could not AssignProcessToJobObject");
+ return FALSE;
+ }
+ }
+ }
+
if(!CreateProcessW(NULL,
execbuff,
&attr,
--
2.26.2