dcavalca / rpms / systemd

Forked from rpms/systemd 2 years ago
Clone
Richard W.M. Jones 78ba63
From 040e689654ef08c63ab93bf0875865398e8d9c91 Mon Sep 17 00:00:00 2001
Richard W.M. Jones 78ba63
From: Tom Gundersen <teg@jklm.no>
Richard W.M. Jones 78ba63
Date: Sun, 24 May 2015 15:20:36 +0200
Richard W.M. Jones 78ba63
Subject: [PATCH] udevd: event - fix event queue in daemenozied mode
Richard W.M. Jones 78ba63
MIME-Version: 1.0
Richard W.M. Jones 78ba63
Content-Type: text/plain; charset=UTF-8
Richard W.M. Jones 78ba63
Content-Transfer-Encoding: 8bit
Richard W.M. Jones 78ba63
Richard W.M. Jones 78ba63
We would enforce that events could only be added to the queue from the
Richard W.M. Jones 78ba63
main process, but that brake in daemonized mode. Relax the restriction
Richard W.M. Jones 78ba63
to only allow one process to add events to the queue.
Richard W.M. Jones 78ba63
Richard W.M. Jones 78ba63
Reported by Mantas Mikulėnas.
Richard W.M. Jones 78ba63
---
Richard W.M. Jones 78ba63
 src/udev/udevd.c | 7 ++++---
Richard W.M. Jones 78ba63
 1 file changed, 4 insertions(+), 3 deletions(-)
Richard W.M. Jones 78ba63
Richard W.M. Jones 78ba63
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
Richard W.M. Jones 78ba63
index 4a44b03..b33a262 100644
Richard W.M. Jones 78ba63
--- a/src/udev/udevd.c
Richard W.M. Jones 78ba63
+++ b/src/udev/udevd.c
Richard W.M. Jones 78ba63
@@ -564,7 +564,10 @@ static int event_queue_insert(Manager *manager, struct udev_device *dev) {
Richard W.M. Jones 78ba63
         assert(manager);
Richard W.M. Jones 78ba63
         assert(dev);
Richard W.M. Jones 78ba63
 
Richard W.M. Jones 78ba63
-        /* only the main process can add events to the queue */
Richard W.M. Jones 78ba63
+        /* only one process can add events to the queue */
Richard W.M. Jones 78ba63
+        if (manager->pid == 0)
Richard W.M. Jones 78ba63
+                manager->pid = getpid();
Richard W.M. Jones 78ba63
+
Richard W.M. Jones 78ba63
         assert(manager->pid == getpid());
Richard W.M. Jones 78ba63
 
Richard W.M. Jones 78ba63
         event = new0(struct event, 1);
Richard W.M. Jones 78ba63
@@ -1300,8 +1303,6 @@ static int manager_new(Manager **ret) {
Richard W.M. Jones 78ba63
         if (!manager)
Richard W.M. Jones 78ba63
                 return log_oom();
Richard W.M. Jones 78ba63
 
Richard W.M. Jones 78ba63
-        manager->pid = getpid();
Richard W.M. Jones 78ba63
-
Richard W.M. Jones 78ba63
         manager->fd_ep = -1;
Richard W.M. Jones 78ba63
         manager->fd_ctrl = -1;
Richard W.M. Jones 78ba63
         manager->fd_uevent = -1;
Richard W.M. Jones 78ba63
-- 
Richard W.M. Jones 78ba63
2.3.1
Richard W.M. Jones 78ba63