Accepting request 741457 from home:mrostecki:branches:devel:kubic
- Add upstream patches with the feature of "prepare" and "check" watchers. That feature is needed by envoy-proxy: * 0001-evwatch-Add-prepare-and-check-watchers.patch * 0002-evwatch-fix-race-condition.patch OBS-URL: https://build.opensuse.org/request/show/741457 OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/libevent?expand=0&rev=46
This commit is contained in:
parent
c04a5bd100
commit
8ddc06dd17
1150
0001-evwatch-Add-prepare-and-check-watchers.patch
Normal file
1150
0001-evwatch-Add-prepare-and-check-watchers.patch
Normal file
File diff suppressed because it is too large
Load Diff
52
0002-evwatch-fix-race-condition.patch
Normal file
52
0002-evwatch-fix-race-condition.patch
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
From 1eefbe38f6a7266e1489765317f4e89489856fc1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dan Rosen <mergeconflict@google.com>
|
||||||
|
Date: Wed, 17 Apr 2019 15:44:59 -0400
|
||||||
|
Subject: [PATCH 2/2] evwatch: fix race condition
|
||||||
|
|
||||||
|
There was a race between event_base_loop and evwatch_new (adding a
|
||||||
|
prepare/check watcher while iterating over the watcher list). Only
|
||||||
|
release the mutex immediately before invoking each watcher callback,
|
||||||
|
and reacquire it immediately afterwards (same as is done for normal
|
||||||
|
event handlers).
|
||||||
|
---
|
||||||
|
event.c | 14 ++++++++------
|
||||||
|
1 file changed, 8 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/event.c b/event.c
|
||||||
|
index 5e41ae04..c6eb175c 100644
|
||||||
|
--- a/event.c
|
||||||
|
+++ b/event.c
|
||||||
|
@@ -2012,11 +2012,12 @@ event_base_loop(struct event_base *base, int flags)
|
||||||
|
event_queue_make_later_events_active(base);
|
||||||
|
|
||||||
|
/* Invoke prepare watchers before polling for events */
|
||||||
|
- EVBASE_RELEASE_LOCK(base, th_base_lock);
|
||||||
|
prepare_info.timeout = tv_p;
|
||||||
|
- TAILQ_FOREACH(watcher, &base->watchers[EVWATCH_PREPARE], next)
|
||||||
|
+ TAILQ_FOREACH(watcher, &base->watchers[EVWATCH_PREPARE], next) {
|
||||||
|
+ EVBASE_RELEASE_LOCK(base, th_base_lock);
|
||||||
|
(*watcher->callback.prepare)(watcher, &prepare_info, watcher->arg);
|
||||||
|
- EVBASE_ACQUIRE_LOCK(base, th_base_lock);
|
||||||
|
+ EVBASE_ACQUIRE_LOCK(base, th_base_lock);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
clear_time_cache(base);
|
||||||
|
|
||||||
|
@@ -2033,10 +2034,11 @@ event_base_loop(struct event_base *base, int flags)
|
||||||
|
|
||||||
|
/* Invoke check watchers after polling for events, and before
|
||||||
|
* processing them */
|
||||||
|
- EVBASE_RELEASE_LOCK(base, th_base_lock);
|
||||||
|
- TAILQ_FOREACH(watcher, &base->watchers[EVWATCH_CHECK], next)
|
||||||
|
+ TAILQ_FOREACH(watcher, &base->watchers[EVWATCH_CHECK], next) {
|
||||||
|
+ EVBASE_RELEASE_LOCK(base, th_base_lock);
|
||||||
|
(*watcher->callback.check)(watcher, &check_info, watcher->arg);
|
||||||
|
- EVBASE_ACQUIRE_LOCK(base, th_base_lock);
|
||||||
|
+ EVBASE_ACQUIRE_LOCK(base, th_base_lock);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
timeout_process(base);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
@ -1,3 +1,11 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Sep 24 12:03:16 UTC 2019 - Michał Rostecki <mrostecki@opensuse.org>
|
||||||
|
|
||||||
|
- Add upstream patches with the feature of "prepare" and "check"
|
||||||
|
watchers. That feature is needed by envoy-proxy:
|
||||||
|
* 0001-evwatch-Add-prepare-and-check-watchers.patch
|
||||||
|
* 0002-evwatch-fix-race-condition.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Aug 20 22:27:52 UTC 2019 - David Disseldorp <ddiss@suse.com>
|
Tue Aug 20 22:27:52 UTC 2019 - David Disseldorp <ddiss@suse.com>
|
||||||
|
|
||||||
|
@ -36,6 +36,10 @@ Source2: %{name}.keyring
|
|||||||
Source3: libevent-rpmlintrc
|
Source3: libevent-rpmlintrc
|
||||||
Source99: baselibs.conf
|
Source99: baselibs.conf
|
||||||
Patch0: python3-shebang.patch
|
Patch0: python3-shebang.patch
|
||||||
|
# PATCH-FEATURE-UPSTREAM 0001-evwatch-Add-prepare-and-check-watchers.patch
|
||||||
|
Patch1: 0001-evwatch-Add-prepare-and-check-watchers.patch
|
||||||
|
# PATCH-FEATURE-UPSTREAM 0002-evwatch-fix-race-condition.patch
|
||||||
|
Patch2: 0002-evwatch-fix-race-condition.patch
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
BuildRequires: libtool
|
BuildRequires: libtool
|
||||||
@ -114,6 +118,8 @@ This package holds the static libraries for libevent2.
|
|||||||
%prep
|
%prep
|
||||||
%setup -q -n %{name}-%{version}-%{version_suffix}
|
%setup -q -n %{name}-%{version}-%{version_suffix}
|
||||||
%patch0 -p1
|
%patch0 -p1
|
||||||
|
%patch1 -p1
|
||||||
|
%patch2 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects
|
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects
|
||||||
|
Loading…
Reference in New Issue
Block a user