You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-lang/erlang/files/erlang-add-epmd-pid-file-cr...

91 lines
2.3 KiB

From 04ace92c33a699f75445dc99c30d521311aba826 Mon Sep 17 00:00:00 2001
From: Steve Arnold <nerdboy@gentoo.org>
Date: Mon, 6 Aug 2018 16:38:30 -0700
Subject: [PATCH] Add daemon-mode pid file creation when not configured for
systemd
Signed-off-by: Steve Arnold <nerdboy@gentoo.org>
---
erts/epmd/src/epmd.c | 39 ++++++++++++++++++++++++++++++++++++++-
erts/epmd/src/epmd.h | 3 +++
2 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/erts/epmd/src/epmd.c b/erts/epmd/src/epmd.c
index 44e997e609..c74888a1ee 100644
--- a/erts/epmd/src/epmd.c
+++ b/erts/epmd/src/epmd.c
@@ -40,6 +40,37 @@ static int check_relaxed(void);
#ifdef __WIN32__
static int has_console(void);
#endif
+#ifndef HAVE_SYSTEMD_DAEMON
+static int create_pidfile(void);
+static const char *pidfile = EPMD_PIDFILE;
+#endif
+
+#ifndef HAVE_SYSTEMD_DAEMON
+static int create_pidfile(void)
+{
+ int fd;
+
+ unlink(pidfile);
+
+ /* open the pidfile */
+ fd = open(pidfile, O_WRONLY|O_CREAT|O_EXCL, 0644);
+ if (fd >= 0) {
+ FILE *f;
+
+ /* write our pid to it */
+ f = fdopen(fd, "w");
+ if (f != NULL) {
+ fprintf(f, "%d\n", getpid());
+ fclose(f);
+ /* leave the fd open */
+ return 0;
+ }
+ close(fd);
+ }
+
+ return -1;
+}
+#endif /* (no) HAVE_SYSTEMD_DAEMON */
#ifdef DONT_USE_MAIN
@@ -340,6 +371,13 @@ static void run_daemon(EpmdVars *g)
umask(0);
+#ifndef HAVE_SYSTEMD_DAEMON
+ if (create_pidfile() < 0) {
+ dbg_perror(g,"could not create pidfile %s", pidfile);
+ epmd_cleanup_exit(g,1);
+ }
+#endif /* HAVE_SYSTEMD_DAEMON */
+
for (fd = 0; fd < g->max_conn ; fd++) /* close all files ... */
close(fd);
/* Syslog on linux will try to write to whatever if we dont
@@ -614,4 +652,3 @@ static int check_relaxed(void)
char* port_str = getenv("ERL_EPMD_RELAXED_COMMAND_CHECK");
return (port_str != NULL) ? 1 : 0;
}
-
diff --git a/erts/epmd/src/epmd.h b/erts/epmd/src/epmd.h
index cffcd4ae7a..e53322acf5 100644
--- a/erts/epmd/src/epmd.h
+++ b/erts/epmd/src/epmd.h
@@ -20,6 +20,9 @@
/* The port number is defined in a makefile */
+/* The name and path to the pid file */
+#define EPMD_PIDFILE "/var/run/epmd.pid"
+
/* Definitions of message codes */
/* Registration and queries */
--
2.17.0