From 2b6624568622a409804a52cedcc2f7c15c420112 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Wed, 8 Dec 2021 17:25:11 -0500 Subject: [PATCH 4/5] services: telephony: Factorize bus polling logic. * gnu/services/telephony.scm (jami-shepherd-services): Move bus readiness polling logic to... * gnu/build/dbus-service.scm (wait-for-bus-readiness): ... here. (%dbus-system-bus): New variable. * gnu/packages/freedesktop.scm (localed): Use it. --- gnu/build/dbus-service.scm | 20 +++++++++++++++++++- gnu/packages/freedesktop.scm | 8 ++++---- gnu/services/telephony.scm | 10 +--------- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/gnu/build/dbus-service.scm b/gnu/build/dbus-service.scm index fd56c8dae7..3ffdebc04d 100644 --- a/gnu/build/dbus-service.scm +++ b/gnu/build/dbus-service.scm @@ -31,7 +31,9 @@ (define-module (gnu build dbus-service) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:autoload (shepherd service) (fork+exec-command) - #:export (%send-dbus-binary + #:export (%dbus-system-bus + + %send-dbus-binary %send-dbus-bus %send-dbus-user %send-dbus-group @@ -44,11 +46,14 @@ (define-module (gnu build dbus-service) dbus-dict->alist dbus-array->list + wait-for-bus-readiness dbus-available-services dbus-service-available? with-retries)) +(define %dbus-system-bus "/var/run/dbus/system_bus_socket") + ;;; ;;; Utilities. ;;; @@ -232,6 +237,19 @@ (define* (send-dbus #:key service path interface method ;;; Higher-level, D-Bus-related procedures. ;;; +(define* (wait-for-bus-readiness #:key (bus %dbus-system-bus) + (timeout 25)) + "Wait until a connection can be opened to BUS. An error is raised when +TIMEOUT seconds elapse." + (let ((sock (socket PF_UNIX SOCK_STREAM 0))) + (with-retries timeout 1 (catch 'system-error + (lambda () + (connect sock AF_UNIX bus) + (close-port sock) + #t) + (lambda args + #f))))) + (define (dbus-available-services) "Return the list of available (acquired) D-Bus services." (let ((reply (parse-dbus-reply diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm index eba06600b2..5f9cbd8438 100644 --- a/gnu/packages/freedesktop.scm +++ b/gnu/packages/freedesktop.scm @@ -57,6 +57,7 @@ (define-module (gnu packages freedesktop) #:use-module (guix build-system perl) #:use-module (guix build-system python) #:use-module (guix build-system glib-or-gtk) + #:use-module ((gnu build dbus-service) #:select (%dbus-system-bus)) #:use-module (gnu packages) #:use-module (gnu packages acl) #:use-module (gnu packages admin) @@ -730,20 +731,19 @@ (define-public localed (file-name (git-file-name name version)) (modules '((guix build utils))) (snippet - '(begin + `(begin ;; Connect to the right location for our D-Bus daemon. (substitute* '("src/basic/def.h" "src/libsystemd/sd-bus/sd-bus.c" "src/stdio-bridge/stdio-bridge.c") (("/run/dbus/system_bus_socket") - "/var/run/dbus/system_bus_socket")) + ,%dbus-system-bus)) ;; Don't insist on having systemd as PID 1 (otherwise ;; 'localectl' would exit without doing anything.) (substitute* "src/shared/bus-util.c" (("sd_booted\\(\\)") - "(1)")) - #t)) + "(1)")))) (patches (search-patches "localed-xorg-keyboard.patch")))) (build-system meson-build-system) (arguments diff --git a/gnu/services/telephony.scm b/gnu/services/telephony.scm index f6501b6423..0ceebbc6d6 100644 --- a/gnu/services/telephony.scm +++ b/gnu/services/telephony.scm @@ -549,15 +549,7 @@ (define pid ;; needed if we were using a PID file, but providing it via a ;; customized config file with would not override ;; the one inherited from the base config of D-Bus. - (let ((sock (socket PF_UNIX SOCK_STREAM 0))) - (with-retries 20 1 (catch 'system-error - (lambda () - (connect sock AF_UNIX - "/var/run/jami/bus") - (close-port sock) - #t) - (lambda args - #f)))) + (wait-for-bus-readiness #:bus "/var/run/jami/bus") pid)) (stop #~(make-kill-destructor))) -- 2.34.0