summaryrefslogtreecommitdiff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2017-12-03 22:36:17 +0100
committerLudovic Courtès <ludo@gnu.org>2017-12-03 23:18:53 +0100
commit4bd70904c7f555a953808a9a4f892f462ffd352f (patch)
treeb835498a88201eb248782802a22499aff29c8b9f /gnu/packages/patches
parentcbb76780ef5e4aed113a1065d96fd6e035f60eaf (diff)
gnu: shepherd: Avoid "Bad file descriptor" warnings.
* gnu/packages/patches/shepherd-close-fds.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/admin.scm (shepherd)[source]: Use it.
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/shepherd-close-fds.patch36
1 files changed, 36 insertions, 0 deletions
diff --git a/gnu/packages/patches/shepherd-close-fds.patch b/gnu/packages/patches/shepherd-close-fds.patch
new file mode 100644
index 0000000000..2078b15265
--- /dev/null
+++ b/gnu/packages/patches/shepherd-close-fds.patch
@@ -0,0 +1,36 @@
+commit 3e346a2a84b099766ea8a3a4a4549f6172483062
+Author: Ludovic Courtès <ludo@gnu.org>
+Date: Sun Dec 3 22:30:03 2017 +0100
+
+ service: In 'exec-command', close open ports before 'execl'.
+
+ This gets rid of annoying "Bad file descriptor" warnings from shepherd.
+
+ * modules/shepherd/service.scm (exec-command): In 'loop', invoke
+ 'close-port' and the ports returned by (fdes->ports i).
+
+diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm
+index b2d8bc5..0ad28a0 100644
+--- a/modules/shepherd/service.scm
++++ b/modules/shepherd/service.scm
+@@ -1,5 +1,5 @@
+ ;; service.scm -- Representation of services.
+-;; Copyright (C) 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
++;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+ ;; Copyright (C) 2002, 2003 Wolfgang Järling <wolfgang@pro-linux.de>
+ ;; Copyright (C) 2014 Alex Sassmannshausen <alex.sassmannshausen@gmail.com>
+ ;; Copyright (C) 2016 Alex Kost <alezost@gmail.com>
+@@ -744,6 +744,14 @@ false."
+
+ (let loop ((i 3))
+ (when (< i max-fd)
++ ;; First try to close any ports associated with file descriptor I.
++ ;; Otherwise the finalization thread might get around to closing
++ ;; those ports eventually, which will raise an EBADF exception (on
++ ;; 2.2), leading to messages like "error in the finalization
++ ;; thread: Bad file descriptor".
++ (for-each (lambda (port)
++ (catch-system-error (close-port port)))
++ (fdes->ports i))
+ (catch-system-error (close-fdes i))
+ (loop (+ i 1)))))