From patchwork Tue Mar 1 07:29:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Attila Lendvai X-Patchwork-Id: 37561 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 8CB6727BBEA; Tue, 1 Mar 2022 07:31:26 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 1923127BBE9 for ; Tue, 1 Mar 2022 07:31:26 +0000 (GMT) Received: from localhost ([::1]:38304 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nOwyj-0007qA-6s for patchwork@mira.cbaines.net; Tue, 01 Mar 2022 02:31:25 -0500 Received: from eggs.gnu.org ([209.51.188.92]:38754) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nOwyQ-0007oQ-4J for guix-patches@gnu.org; Tue, 01 Mar 2022 02:31:07 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:41421) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nOwyM-00019Z-3N for guix-patches@gnu.org; Tue, 01 Mar 2022 02:31:05 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1nOwyL-0007aN-Un for guix-patches@gnu.org; Tue, 01 Mar 2022 02:31:01 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#54205] [PATCH v2] Factor out a public FORK-AND-CALL. References: <20220301070615.21028-1-attila@lendvai.name> In-Reply-To: <20220301070615.21028-1-attila@lendvai.name> Resent-From: Attila Lendvai Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 01 Mar 2022 07:31:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 54205 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 54205@debbugs.gnu.org Cc: Attila Lendvai Received: via spool by 54205-submit@debbugs.gnu.org id=B54205.164611981029073 (code B ref 54205); Tue, 01 Mar 2022 07:31:01 +0000 Received: (at 54205) by debbugs.gnu.org; 1 Mar 2022 07:30:10 +0000 Received: from localhost ([127.0.0.1]:35318 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nOwxV-0007Yr-Jc for submit@debbugs.gnu.org; Tue, 01 Mar 2022 02:30:09 -0500 Received: from mail-ed1-f42.google.com ([209.85.208.42]:40534) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nOwxU-0007XY-9y for 54205@debbugs.gnu.org; Tue, 01 Mar 2022 02:30:08 -0500 Received: by mail-ed1-f42.google.com with SMTP id h15so20765853edv.7 for <54205@debbugs.gnu.org>; Mon, 28 Feb 2022 23:30:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=rV9DdXdn3FaNRdf4hfVycvLSqQGs7HbPBXnQtkJakPM=; b=kZQYMb6NQb/Yzh8jakf9E8jeXVCS+4+8zxByPlv1FguXQTn0uZVpAOh7wiJhjOUexS f/6hsFCcGpa8yTX8VsygycWLAixtrnUGEE8HAuYxkVAdesx8B+SOSWrzMQghiUMJYpAO dVjqh2Zokc4oxBocZKvDzEveUmAvOt2vyPH3JgiqYD1LjpNtprzObC6qnwQNWS6IWzhy qDPL+zpc8+IPavTnSnwDs9tNDbEx/alMesuds9sifBZafk5sby9Whgi81FZj29oOD194 UxfPBPS/E7CQ6jwOndbacGDfGLVHPwWkv9XeZ+HEnat3Saj3q5ugaW1VQXk9MceL8qN8 y0iQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :mime-version:content-transfer-encoding; bh=rV9DdXdn3FaNRdf4hfVycvLSqQGs7HbPBXnQtkJakPM=; b=s9LPWezaz+smQj/tBVSUu0WglLHdZ+ow+Coiy0O4MXJGtYEWjCzDmfikVHufLwhc+Z wetAfA1NEfHxVT0eDEK2Oil2nvhE6wG/MH6IstolIuEFonnv/Z9PHKVEVL6RVgM3BNzC Qx6D/j3t351aqeE2GPQTKqz7vMfZkcqezm5Ac7QSLvaEyqX7GwcgiTWQ/q4iZTax1KlH MVuS5VqV0XXs/ejczPKZt4U8d+TXrnTvC2oL9zxM59pnVI66rlBtqIkRiBO2ekCOqXQS lg+LMLE11jCCUnBgrFGPaHfYYn4WDpEew0UKu+OekvbeGWoKUrMumLfePZ+bSmUoz4dH z6pA== X-Gm-Message-State: AOAM532QCRJF7nk5jf0Bz1S2C8+/g/gfjp2NTjk+0LHkZcY9QGDp8b/2 xknQztun9AXCMNesnZEFanTGUum9mvU= X-Google-Smtp-Source: ABdhPJy+1vHrlYYAcfw6Vvv4tsWC9LWEGgwRo1Q49cuyqK1lFeW4bT6xUw7bbU6G1Dv7dvCWgnyE+Q== X-Received: by 2002:a05:6402:27cb:b0:412:124:e0db with SMTP id c11-20020a05640227cb00b004120124e0dbmr23219006ede.72.1646119802252; Mon, 28 Feb 2022 23:30:02 -0800 (PST) Received: from lelap.local (catv-89-132-245-188.catv.fixed.vodafone.hu. [89.132.245.188]) by smtp.gmail.com with ESMTPSA id w2-20020a50d982000000b00410dc0889b9sm6879612edj.63.2022.02.28.23.30.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Feb 2022 23:30:01 -0800 (PST) From: Attila Lendvai Date: Tue, 1 Mar 2022 08:29:27 +0100 Message-Id: <20220301072927.26525-1-attila@lendvai.name> X-Mailer: git-send-email 2.34.0 MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches This enables service implementations to easily inject code that is run before their service is started. One such example is calling setrlimit from a start action to set NOFILE (the open files limit), before the service is exec'ed and inherits this value from the parent process, i.e. from Shepherd. * modules/shepherd/service.scm (fork-and-call): New function. (fork+exec-command): Use the above. --- v2: fixes the commit message. modules/shepherd/service.scm | 51 ++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm index ad8608b..8d5e30f 100644 --- a/modules/shepherd/service.scm +++ b/modules/shepherd/service.scm @@ -79,6 +79,7 @@ make-forkexec-constructor make-kill-destructor exec-command + fork-and-call fork+exec-command default-pid-file-timeout read-pid-file @@ -883,19 +884,8 @@ false." ;; Signals that the shepherd process handles. (list SIGCHLD SIGINT SIGHUP SIGTERM)) -(define* (fork+exec-command command - #:key - (user #f) - (group #f) - (supplementary-groups '()) - (log-file #f) - (directory (default-service-directory)) - (file-creation-mask #f) - (create-session? #t) - (environment-variables - (default-environment-variables))) - "Spawn a process that executed COMMAND as per 'exec-command', and return -its PID." +(define* (fork-and-call thunk) + "Call THUNK in a fork." ;; Install the SIGCHLD handler if this is the first fork+exec-command call. (unless %sigchld-handler-installed? (sigaction SIGCHLD handle-SIGCHLD SA_NOCLDSTOP) @@ -916,17 +906,34 @@ its PID." ;; process. (unblock-signals %precious-signals) - (exec-command command - #:user user - #:group group - #:supplementary-groups supplementary-groups - #:log-file log-file - #:directory directory - #:file-creation-mask file-creation-mask - #:create-session? create-session? - #:environment-variables environment-variables)) + (thunk)) pid)))) +(define* (fork+exec-command command + #:key + (user #f) + (group #f) + (supplementary-groups '()) + (log-file #f) + (directory (default-service-directory)) + (file-creation-mask #f) + (create-session? #t) + (environment-variables + (default-environment-variables))) + "Spawn a process that executed COMMAND as per 'exec-command', and return +its PID." + (fork-and-call + (lambda () + (exec-command command + #:user user + #:group group + #:supplementary-groups supplementary-groups + #:log-file log-file + #:directory directory + #:file-creation-mask file-creation-mask + #:create-session? create-session? + #:environment-variables environment-variables)))) + (define* (make-forkexec-constructor command #:key (user #f)