Accepting request 198738 from Base:System

Added upstream patch for 'dbus-daemon enters infinite loop' bug (bnc#782909, fdo#68945) (forwarded request 197864 from sumski)

OBS-URL: https://build.opensuse.org/request/show/198738
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/dbus-1?expand=0&rev=104
This commit is contained in:
Tomáš Chvátal 2013-09-13 12:44:05 +00:00 committed by Git OBS Bridge
commit 937ed13656
5 changed files with 67 additions and 0 deletions

View File

@ -0,0 +1,49 @@
From fc600b6a8f0dec5642b45c1026dee24c9adb9bc2 Mon Sep 17 00:00:00 2001
From: Simon McVittie <simon.mcvittie@collabora.co.uk>
Date: Wed, 4 Sep 2013 17:53:23 +0100
Subject: [PATCH 1/3] _dbus_babysitter_unref: avoid infinite loop if waitpid()
returns EINTR
If waitpid() failed with EINTR, we'd go back for another go, but
because ret is nonzero, we'd skip the waitpid() and just keep looping.
Also avoid an unnecessary "goto" in favour of a proper loop, to make it
more clearly correct.
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=68945
Reviewed-by: Colin Walters <walters@verbum.org>
---
dbus/dbus-spawn.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/dbus/dbus-spawn.c b/dbus/dbus-spawn.c
index ef00801..6e42f55 100644
--- a/dbus/dbus-spawn.c
+++ b/dbus/dbus-spawn.c
@@ -308,15 +308,18 @@ _dbus_babysitter_unref (DBusBabysitter *sitter)
if (ret == 0)
kill (sitter->sitter_pid, SIGKILL);
- again:
if (ret == 0)
- ret = waitpid (sitter->sitter_pid, &status, 0);
+ {
+ do
+ {
+ ret = waitpid (sitter->sitter_pid, &status, 0);
+ }
+ while (_DBUS_UNLIKELY (ret < 0 && errno == EINTR));
+ }
if (ret < 0)
{
- if (errno == EINTR)
- goto again;
- else if (errno == ECHILD)
+ if (errno == ECHILD)
_dbus_warn ("Babysitter process not available to be reaped; should not happen\n");
else
_dbus_warn ("Unexpected error %d in waitpid() for babysitter: %s\n",
--
1.8.4

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Sat Sep 7 20:17:40 UTC 2013 - hrvoje.senjan@gmail.com
- Added 0001-_dbus_babysitter_unref-avoid-infinite-loop-if-waitpi.patch
from upstream for resolving fdo#68945, bnc#782909
-------------------------------------------------------------------
Tue Jun 25 14:09:30 UTC 2013 - coolo@suse.com

View File

@ -62,6 +62,8 @@ Patch0: dbus-log-deny.patch
Patch1: dbus-do-autolaunch.patch
# PATCH-FIX-OPENSUSE hpj@suse.com bnc#802525 - Avoid clients hanging after move to /run
Patch2: dbus-fall-back-to-old-run-directory.patch
# PATCH-FIX-UPSTREAM 0001-_dbus_babysitter_unref-avoid-infinite-loop-if-waitpi.patch (fdo#68945, bnc#782909)
Patch3: 0001-_dbus_babysitter_unref-avoid-infinite-loop-if-waitpi.patch
%bcond_without selinux
%if %{with selinux}
BuildRequires: libselinux-devel
@ -118,6 +120,7 @@ bus daemon).
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%build
autoreconf -fi

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Sat Sep 7 20:17:40 UTC 2013 - hrvoje.senjan@gmail.com
- Added 0001-_dbus_babysitter_unref-avoid-infinite-loop-if-waitpi.patch
from upstream for resolving fdo#68945, bnc#782909
-------------------------------------------------------------------
Tue Jun 25 14:09:30 UTC 2013 - coolo@suse.com

View File

@ -57,6 +57,8 @@ Patch0: dbus-log-deny.patch
Patch1: dbus-do-autolaunch.patch
# PATCH-FIX-OPENSUSE hpj@suse.com bnc#802525 - Avoid clients hanging after move to /run
Patch2: dbus-fall-back-to-old-run-directory.patch
# PATCH-FIX-UPSTREAM 0001-_dbus_babysitter_unref-avoid-infinite-loop-if-waitpi.patch (fdo#68945, bnc#782909)
Patch3: 0001-_dbus_babysitter_unref-avoid-infinite-loop-if-waitpi.patch
%bcond_without selinux
%if %{with selinux}
BuildRequires: libselinux-devel
@ -106,6 +108,7 @@ bus daemon).
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%build
autoreconf -fi