From 79fe25c1db2f39df245c2e4e08718acaed86bc3e Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Feb 28 2018 17:23:29 +0000 Subject: use better upstream patch for exit-idle-time use %%license, %%ldconfig_scriptlets --- diff --git a/pulseaudio-11.1-exit_idle_time-2.patch b/pulseaudio-11.1-exit_idle_time-2.patch new file mode 100644 index 0000000..e648398 --- /dev/null +++ b/pulseaudio-11.1-exit_idle_time-2.patch @@ -0,0 +1,102 @@ +diff -up pulseaudio-11.1/src/modules/module-console-kit.c.foo pulseaudio-11.1/src/modules/module-console-kit.c +--- pulseaudio-11.1/src/modules/module-console-kit.c.foo 2016-08-23 07:50:10.000000000 -0500 ++++ pulseaudio-11.1/src/modules/module-console-kit.c 2018-02-28 11:01:50.138465311 -0600 +@@ -120,6 +120,19 @@ static void add_session(struct userdata + + pa_log_debug("Added new session %s", id); + ++ /* Positive exit_idle_time is only useful when we have no session tracking ++ * capability, so we can set it to 0 now that we have detected a session. ++ * The benefit of setting exit_idle_time to 0 is that pulseaudio will exit ++ * immediately when the session ends. That in turn is useful, because some ++ * systems (those that use pam_systemd but don't use systemd for managing ++ * pulseaudio) clean $XDG_RUNTIME_DIR on logout, but fail to terminate all ++ * services that depend on the files in $XDG_RUNTIME_DIR. The directory ++ * contains our sockets, and if the sockets are removed without terminating ++ * pulseaudio, a quick relogin will likely cause trouble, because a new ++ * instance will be spawned while the old instance is still running. */ ++ if (u->core->exit_idle_time > 0) ++ pa_core_set_exit_idle_time(u->core, 0); ++ + fail: + + if (m) +diff -up pulseaudio-11.1/src/modules/module-systemd-login.c.foo pulseaudio-11.1/src/modules/module-systemd-login.c +--- pulseaudio-11.1/src/modules/module-systemd-login.c.foo 2018-02-28 11:01:50.138465311 -0600 ++++ pulseaudio-11.1/src/modules/module-systemd-login.c 2018-02-28 11:03:06.053396460 -0600 +@@ -86,6 +86,20 @@ static int add_session(struct userdata * + pa_hashmap_put(u->sessions, session->id, session); + + pa_log_debug("Added new session %s", id); ++ ++ /* Positive exit_idle_time is only useful when we have no session tracking ++ * capability, so we can set it to 0 now that we have detected a session. ++ * The benefit of setting exit_idle_time to 0 is that pulseaudio will exit ++ * immediately when the session ends. That in turn is useful, because some ++ * systems (those that use pam_systemd but don't use systemd for managing ++ * pulseaudio) clean $XDG_RUNTIME_DIR on logout, but fail to terminate all ++ * services that depend on the files in $XDG_RUNTIME_DIR. The directory ++ * contains our sockets, and if the sockets are removed without terminating ++ * pulseaudio, a quick relogin will likely cause trouble, because a new ++ * instance will be spawned while the old instance is still running. */ ++ if (u->core->exit_idle_time > 0) ++ pa_core_set_exit_idle_time(u->core, 0); ++ + return 0; + } + +diff -up pulseaudio-11.1/src/modules/x11/module-x11-xsmp.c.foo pulseaudio-11.1/src/modules/x11/module-x11-xsmp.c +--- pulseaudio-11.1/src/modules/x11/module-x11-xsmp.c.foo 2016-08-23 07:50:10.000000000 -0500 ++++ pulseaudio-11.1/src/modules/x11/module-x11-xsmp.c 2018-02-28 11:01:50.138465311 -0600 +@@ -208,6 +208,19 @@ int pa__init(pa_module*m) { + if (!u->client) + goto fail; + ++ /* Positive exit_idle_time is only useful when we have no session tracking ++ * capability, so we can set it to 0 now that we have detected a session. ++ * The benefit of setting exit_idle_time to 0 is that pulseaudio will exit ++ * immediately when the session ends. That in turn is useful, because some ++ * systems (those that use pam_systemd but don't use systemd for managing ++ * pulseaudio) clean $XDG_RUNTIME_DIR on logout, but fail to terminate all ++ * services that depend on the files in $XDG_RUNTIME_DIR. The directory ++ * contains our sockets, and if the sockets are removed without terminating ++ * pulseaudio, a quick relogin will likely cause trouble, because a new ++ * instance will be spawned while the old instance is still running. */ ++ if (u->core->exit_idle_time > 0) ++ pa_core_set_exit_idle_time(u->core, 0); ++ + pa_modargs_free(ma); + + return 0; +diff -up pulseaudio-11.1/src/pulsecore/core.c.foo pulseaudio-11.1/src/pulsecore/core.c +--- pulseaudio-11.1/src/pulsecore/core.c.foo 2018-02-28 11:01:50.137465298 -0600 ++++ pulseaudio-11.1/src/pulsecore/core.c 2018-02-28 11:01:50.139465323 -0600 +@@ -426,6 +426,16 @@ void pa_core_update_default_source(pa_co + pa_hook_fire(&core->hooks[PA_CORE_HOOK_DEFAULT_SOURCE_CHANGED], core->default_source); + } + ++void pa_core_set_exit_idle_time(pa_core *core, int time) { ++ pa_assert(core); ++ ++ if (time == core->exit_idle_time) ++ return; ++ ++ pa_log_info("exit_idle_time: %i -> %i", core->exit_idle_time, time); ++ core->exit_idle_time = time; ++} ++ + static void exit_callback(pa_mainloop_api *m, pa_time_event *e, const struct timeval *t, void *userdata) { + pa_core *c = userdata; + pa_assert(c->exit_event == e); +diff -up pulseaudio-11.1/src/pulsecore/core.h.foo pulseaudio-11.1/src/pulsecore/core.h +--- pulseaudio-11.1/src/pulsecore/core.h.foo 2018-02-28 11:01:50.120465090 -0600 ++++ pulseaudio-11.1/src/pulsecore/core.h 2018-02-28 11:01:50.139465323 -0600 +@@ -255,6 +255,8 @@ void pa_core_set_configured_default_sour + void pa_core_update_default_sink(pa_core *core); + void pa_core_update_default_source(pa_core *core); + ++void pa_core_set_exit_idle_time(pa_core *core, int time); ++ + /* Check whether no one is connected to this core */ + void pa_core_check_idle(pa_core *c); + diff --git a/pulseaudio.spec b/pulseaudio.spec index 568117a..251b2a7 100644 --- a/pulseaudio.spec +++ b/pulseaudio.spec @@ -59,9 +59,8 @@ Patch202: pulseaudio-9.0-disable_flat_volumes.patch # see also https://bugs.freedesktop.org/show_bug.cgi?id=96638 Patch203: pulseaudio-8.99.2-getaffinity.patch -# reduce exit-idle-time 20 -> 4 -# to mitigate http://bugzilla.redhat.com/1510301 -Patch204: pulseaudio-11.1-exit_idle_time.patch +# upstreamed exit_idle_time solution, set to 0 in managed environments +Patch204: pulseaudio-11.1-exit_idle_time-2.patch # workaround rawhide build failures, avoid dup'd memfd_create declaration # https://bugs.freedesktop.org/show_bug.cgi?id=104733 @@ -429,8 +428,7 @@ if ! getent passwd pulse >/dev/null ; then fi exit 0 -%post -p /sbin/ldconfig -%postun -p /sbin/ldconfig +%ldconfig_scriptlets %posttrans # handle renamed module-cork-music-on-phone => module-role-cork @@ -440,7 +438,8 @@ exit 0 ) ||: %files -%doc README LICENSE GPL LGPL +%doc README +%license LICENSE GPL LGPL %config(noreplace) %{_sysconfdir}/pulse/daemon.conf %config(noreplace) %{_sysconfdir}/pulse/default.pa %config(noreplace) %{_sysconfdir}/pulse/system.pa @@ -668,8 +667,10 @@ exit 0 %changelog -* Sun Feb 25 2018 Rex Dieter - 11.1-12 +* Wed Feb 28 2018 Rex Dieter - 11.1-12 - BR: gcc-c++ +- use %%license, %%ldconfig_scriptlets +- use better upstream patch for exit-idle-time * Fri Feb 09 2018 Igor Gnatenko - 11.1-11 - Escape macros in %%changelog