[pulseaudio-commits] 9 commits - src/daemon src/modules src/pulsecore
Colin Guthrie
colin at kemper.freedesktop.org
Mon Aug 15 01:58:53 PDT 2011
src/daemon/daemon-conf.c | 2 +-
src/modules/bluetooth/bluetooth-util.c | 4 ++--
src/modules/dbus/iface-core.c | 6 ++++--
src/modules/jack/module-jackdbus-detect.c | 1 +
src/modules/module-device-manager.c | 7 +++++--
src/modules/module-esound-compat-spawnfd.c | 3 ++-
src/modules/module-native-protocol-fd.c | 4 ++--
src/modules/module-null-source.c | 1 +
src/modules/module-tunnel.c | 24 ++++++++++++++++--------
src/modules/module-virtual-source.c | 2 ++
src/modules/raop/raop_client.c | 2 ++
src/pulsecore/memblock.c | 8 ++++----
src/pulsecore/protocol-native.c | 3 ++-
src/pulsecore/sink-input.c | 14 ++++++++++----
src/pulsecore/svolume_arm.c | 2 +-
src/pulsecore/svolume_mmx.c | 2 +-
src/pulsecore/svolume_orc.c | 2 +-
src/pulsecore/svolume_sse.c | 2 +-
18 files changed, 58 insertions(+), 31 deletions(-)
New commits:
commit 5fe545de233f2a8b8f534a63d3fb6c5b903c977b
Author: Lu Guanqun <guanqun.lu at intel.com>
Date: Mon Aug 15 13:24:51 2011 +0800
memblock: use built-in function
Signed-off-by: Lu Guanqun <guanqun.lu at intel.com>
diff --git a/src/pulsecore/memblock.c b/src/pulsecore/memblock.c
index 19be151..9739731 100644
--- a/src/pulsecore/memblock.c
+++ b/src/pulsecore/memblock.c
@@ -229,7 +229,7 @@ static pa_memblock *memblock_new_appended(pa_mempool *p, size_t length) {
/* If -1 is passed as length we choose the size for the caller. */
if (length == (size_t) -1)
- length = p->block_size - PA_ALIGN(sizeof(pa_memblock));
+ length = pa_mempool_block_size_max(p);
b = pa_xmalloc(PA_ALIGN(sizeof(pa_memblock)) + length);
PA_REFCNT_INIT(b);
commit ecbb4b4ef4ac91f4d79e537ea07492634f50037d
Author: Lu Guanqun <guanqun.lu at intel.com>
Date: Mon Aug 15 09:51:37 2011 +0800
memblock: fix memory leak when pa_shm_create_rw fails
Signed-off-by: Lu Guanqun <guanqun.lu at intel.com>
diff --git a/src/pulsecore/memblock.c b/src/pulsecore/memblock.c
index e34a739..19be151 100644
--- a/src/pulsecore/memblock.c
+++ b/src/pulsecore/memblock.c
@@ -711,9 +711,6 @@ pa_mempool* pa_mempool_new(pa_bool_t shared, size_t size) {
p = pa_xnew(pa_mempool, 1);
- p->mutex = pa_mutex_new(TRUE, TRUE);
- p->semaphore = pa_semaphore_new(0);
-
p->block_size = PA_PAGE_ALIGN(PA_MEMPOOL_SLOT_SIZE);
if (p->block_size < PA_PAGE_SIZE)
p->block_size = PA_PAGE_SIZE;
@@ -745,6 +742,9 @@ pa_mempool* pa_mempool_new(pa_bool_t shared, size_t size) {
PA_LLIST_HEAD_INIT(pa_memimport, p->imports);
PA_LLIST_HEAD_INIT(pa_memexport, p->exports);
+ p->mutex = pa_mutex_new(TRUE, TRUE);
+ p->semaphore = pa_semaphore_new(0);
+
p->free_slots = pa_flist_new(p->n_blocks);
return p;
commit a1ce2426d8cd63f0bd1772b3491d765e9af2b1e7
Author: Maarten Bosmans <mkbosmans at gmail.com>
Date: Sat Aug 13 13:43:21 2011 +0200
Avoid read from freed memory
The order of freeing the hashmaps is important here, because otherwise a string used as key is freed before the hashmap
is freed.
Valgrind reports this as:
Invalid read of size 1
at 0x4107042: pa_idxset_string_hash_func (idxset.c:67)
by 0x4106026: remove_entry (hashmap.c:93)
by 0x41061BF: pa_hashmap_free (hashmap.c:110)
by 0x71DD143: pa_dbusiface_core_free (iface-core.c:2105)
by 0x71F2169: module_dbus_protocol_LTX_pa__done (module-dbus-protocol.c:595)
by 0x406DC51: pa_module_free (module.c:162)
by 0x406E01D: pa_module_unload_all (module.c:210)
by 0x4068842: core_free (core.c:169)
by 0x406FD5D: pa_object_unref (object.c:64)
by 0x805224D: pa_core_unref (core.h:184)
by 0x805560B: main (main.c:1159)
Address 0x4d099c0 is 0 bytes inside a block of size 100 free'd
at 0x4025BF0: free (vg_replace_malloc.c:366)
by 0x40F128C: pa_xfree (xmalloc.c:131)
by 0x71E4CEB: pa_dbusiface_device_free (iface-device.c:1293)
by 0x71DCD7E: free_device_cb (iface-core.c:2062)
by 0x41061D7: pa_hashmap_free (hashmap.c:113)
by 0x71DD125: pa_dbusiface_core_free (iface-core.c:2104)
by 0x71F2169: module_dbus_protocol_LTX_pa__done (module-dbus-protocol.c:595)
by 0x406DC51: pa_module_free (module.c:162)
by 0x406E01D: pa_module_unload_all (module.c:210)
by 0x4068842: core_free (core.c:169)
by 0x406FD5D: pa_object_unref (object.c:64)
by 0x805224D: pa_core_unref (core.h:184)
diff --git a/src/modules/dbus/iface-core.c b/src/modules/dbus/iface-core.c
index bb43df9..042ca3b 100644
--- a/src/modules/dbus/iface-core.c
+++ b/src/modules/dbus/iface-core.c
@@ -2099,12 +2099,14 @@ void pa_dbusiface_core_free(pa_dbusiface_core *c) {
pa_assert_se(pa_dbus_protocol_remove_interface(c->dbus_protocol, PA_DBUS_CORE_OBJECT_PATH, core_interface_info.name) >= 0);
+ /* Note that the order of freeing is important below.
+ * Do not change it for the sake of tidiness without checking! */
pa_subscription_free(c->subscription);
pa_hashmap_free(c->cards, free_card_cb, NULL);
- pa_hashmap_free(c->sinks_by_index, free_device_cb, NULL);
pa_hashmap_free(c->sinks_by_path, NULL, NULL);
- pa_hashmap_free(c->sources_by_index, free_device_cb, NULL);
+ pa_hashmap_free(c->sinks_by_index, free_device_cb, NULL);
pa_hashmap_free(c->sources_by_path, NULL, NULL);
+ pa_hashmap_free(c->sources_by_index, free_device_cb, NULL);
pa_hashmap_free(c->playback_streams, free_stream_cb, NULL);
pa_hashmap_free(c->record_streams, free_stream_cb, NULL);
pa_hashmap_free(c->samples, free_sample_cb, NULL);
commit 92219b01b9c847af762a3a68ae538c0200bff2f8
Author: Maarten Bosmans <mkbosmans at gmail.com>
Date: Sat Aug 13 13:43:20 2011 +0200
Initialise variables
These were detected using clang static analyzer.
diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
index b24fe7a..4b85ce9 100644
--- a/src/modules/bluetooth/bluetooth-util.c
+++ b/src/modules/bluetooth/bluetooth-util.c
@@ -916,7 +916,7 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
} else if (dbus_message_is_signal(m, "org.bluez.MediaTransport", "PropertyChanged")) {
pa_bluetooth_device *d;
- pa_bluetooth_transport *t;
+ pa_bluetooth_transport *t = NULL;
void *state = NULL;
DBusMessageIter arg_i;
@@ -1112,7 +1112,7 @@ static DBusMessage *endpoint_set_configuration(DBusConnection *conn, DBusMessage
const char *path, *dev_path = NULL, *uuid = NULL;
uint8_t *config = NULL;
int size = 0;
- pa_bool_t nrec;
+ pa_bool_t nrec = FALSE;
enum profile p;
DBusMessageIter args, props;
DBusMessage *r;
diff --git a/src/modules/module-esound-compat-spawnfd.c b/src/modules/module-esound-compat-spawnfd.c
index 617d5a1..e2488fc 100644
--- a/src/modules/module-esound-compat-spawnfd.c
+++ b/src/modules/module-esound-compat-spawnfd.c
@@ -47,7 +47,8 @@ static const char* const valid_modargs[] = {
int pa__init(pa_module*m) {
pa_modargs *ma = NULL;
- int ret = -1, fd = -1;
+ int ret = -1;
+ int32_t fd = -1;
char x = 1;
pa_assert(m);
diff --git a/src/modules/module-native-protocol-fd.c b/src/modules/module-native-protocol-fd.c
index eed0505..7021a26 100644
--- a/src/modules/module-native-protocol-fd.c
+++ b/src/modules/module-native-protocol-fd.c
@@ -48,7 +48,7 @@ static const char* const valid_modargs[] = {
int pa__init(pa_module*m) {
pa_iochannel *io;
pa_modargs *ma;
- int32_t fd;
+ int32_t fd = -1;
int r = -1;
pa_native_options *options = NULL;
@@ -59,7 +59,7 @@ int pa__init(pa_module*m) {
goto finish;
}
- if (pa_modargs_get_value_s32(ma, "fd", &fd) < 0) {
+ if (pa_modargs_get_value_s32(ma, "fd", &fd) < 0 || fd < 0) {
pa_log("Invalid file descriptor.");
goto finish;
}
diff --git a/src/modules/module-null-source.c b/src/modules/module-null-source.c
index b2981c3..b3ece7b 100644
--- a/src/modules/module-null-source.c
+++ b/src/modules/module-null-source.c
@@ -192,6 +192,7 @@ int pa__init(pa_module*m) {
}
ss = m->core->default_sample_spec;
+ map = m->core->default_channel_map;
if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_DEFAULT) < 0) {
pa_log("Invalid sample format specification or channel map");
goto fail;
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 3ed9f1a..c71345e 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -1061,7 +1061,8 @@ static playback_stream* playback_stream_new(
/* Note: This function takes ownership of the 'formats' param, so we need
* to take extra care to not leak it */
- playback_stream *s, *ssync;
+ playback_stream *ssync;
+ playback_stream *s = NULL;
pa_sink_input *sink_input = NULL;
pa_memchunk silence;
uint32_t idx;
commit 3b76d8065f1ddf67939811d558660635c8143425
Author: Maarten Bosmans <mkbosmans at gmail.com>
Date: Sat Aug 13 13:43:19 2011 +0200
Plug some memory leaks
These were detected with valgrind.
diff --git a/src/modules/jack/module-jackdbus-detect.c b/src/modules/jack/module-jackdbus-detect.c
index 864f96b..6bbf38b 100644
--- a/src/modules/jack/module-jackdbus-detect.c
+++ b/src/modules/jack/module-jackdbus-detect.c
@@ -231,6 +231,7 @@ int pa__init(pa_module *m) {
pa_log("Failed to parse connect= argument.");
goto fail;
}
+ pa_modargs_free(ma);
if (!(connection = pa_dbus_bus_get(m->core, DBUS_BUS_SESSION, &error)) || dbus_error_is_set(&error)) {
diff --git a/src/modules/module-device-manager.c b/src/modules/module-device-manager.c
index 67baef3..34e653e 100644
--- a/src/modules/module-device-manager.c
+++ b/src/modules/module-device-manager.c
@@ -199,6 +199,7 @@ static void entry_free(struct entry* e) {
pa_xfree(e->description);
pa_xfree(e->icon);
+ pa_xfree(e);
}
static pa_bool_t entry_write(struct userdata *u, const char *name, const struct entry *e) {
@@ -769,8 +770,6 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
t != (PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT|PA_SUBSCRIPTION_EVENT_CHANGE))
return;
- entry = entry_new();
-
if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK_INPUT) {
pa_sink_input *si;
@@ -801,6 +800,7 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
if (!(sink = pa_idxset_get_by_index(c->sinks, idx)))
return;
+ entry = entry_new();
name = pa_sprintf_malloc("sink:%s", sink->name);
old = load_or_initialize_entry(u, entry, name, "sink:");
@@ -830,6 +830,7 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
if (source->monitor_of)
return;
+ entry = entry_new();
name = pa_sprintf_malloc("source:%s", source->name);
old = load_or_initialize_entry(u, entry, name, "source:");
@@ -847,6 +848,8 @@ static void subscribe_callback(pa_core *c, pa_subscription_event_type_t t, uint3
pa_xfree(entry->icon);
entry->icon = pa_xstrdup(pa_proplist_gets(source->proplist, PA_PROP_DEVICE_ICON_NAME));
+ } else {
+ pa_assert_not_reached();
}
pa_assert(name);
diff --git a/src/modules/module-virtual-source.c b/src/modules/module-virtual-source.c
index 70e327b..7530975 100644
--- a/src/modules/module-virtual-source.c
+++ b/src/modules/module-virtual-source.c
@@ -661,6 +661,7 @@ int pa__init(pa_module*m) {
u->sink_memblockq = pa_memblockq_new(0, MEMBLOCKQ_MAXLENGTH, 0, pa_frame_size(&ss), 1, 1, 0, NULL);
if (!u->sink_memblockq) {
+ pa_sink_new_data_done(&sink_data);
pa_log("Failed to create sink memblockq.");
goto fail;
}
@@ -689,6 +690,7 @@ int pa__init(pa_module*m) {
pa_sink_put(u->sink);
} else {
+ pa_sink_new_data_done(&sink_data);
/* optional uplink sink not enabled */
u->sink = NULL;
}
diff --git a/src/modules/raop/raop_client.c b/src/modules/raop/raop_client.c
index cba7af9..118b9d9 100644
--- a/src/modules/raop/raop_client.c
+++ b/src/modules/raop/raop_client.c
@@ -385,6 +385,8 @@ void pa_raop_client_free(pa_raop_client* c) {
if (c->rtsp)
pa_rtsp_client_free(c->rtsp);
+ if (c->sid)
+ pa_xfree(c->sid);
pa_xfree(c->host);
pa_xfree(c);
}
commit 1e4298be4d7c5447699eaa93487bceecfc58cea5
Author: Maarten Bosmans <mkbosmans at gmail.com>
Date: Sat Aug 13 13:43:18 2011 +0200
module-tunnel: Fix for new protocol versions
The commit 7ebc5033 resulted in segfaults, because format->plist was not allocated.
The solution is not to allocate pa_format_info on the stack, but to properly use pa_format_info_new().
Also a typo regarding pa_tagstruct_putu8 is corrected.
diff --git a/src/modules/module-tunnel.c b/src/modules/module-tunnel.c
index 3efb40b..59a4e1e 100644
--- a/src/modules/module-tunnel.c
+++ b/src/modules/module-tunnel.c
@@ -1095,7 +1095,7 @@ static void sink_info_cb(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_t
if (u->version >= 21) {
uint8_t n_formats;
- pa_format_info format;
+ pa_format_info *format;
if (pa_tagstruct_getu8(t, &n_formats) < 0) { /* no. of formats */
pa_log("Parse failure");
@@ -1103,10 +1103,13 @@ static void sink_info_cb(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_t
}
for (uint8_t j = 0; j < n_formats; j++) {
- if (pa_tagstruct_get_format_info(t, &format)) { /* format info */
+ format = pa_format_info_new();
+ if (pa_tagstruct_get_format_info(t, format)) { /* format info */
+ pa_format_info_free(format);
pa_log("Parse failure");
goto fail;
}
+ pa_format_info_free(format);
}
}
@@ -1209,13 +1212,14 @@ static void sink_input_info_cb(pa_pdispatch *pd, uint32_t command, uint32_t tag
}
if (u->version >= 21) {
- pa_format_info format;
-
- if (pa_tagstruct_get_format_info(t, &format) < 0) {
+ pa_format_info *format = pa_format_info_new();
+ if (pa_tagstruct_get_format_info(t, format) < 0) {
+ pa_format_info_free(format);
pa_log("Parse failure");
goto fail;
}
+ pa_format_info_free(format);
}
if (!pa_tagstruct_eof(t)) {
@@ -1535,10 +1539,14 @@ static void create_stream_callback(pa_pdispatch *pd, uint32_t command, uint32_t
}
if (u->version >= 21) {
- pa_format_info format;
+ pa_format_info *format = pa_format_info_new();
- if (pa_tagstruct_get_format_info(t, &format) < 0)
+ if (pa_tagstruct_get_format_info(t, format) < 0) {
+ pa_format_info_free(format);
goto parse_error;
+ }
+
+ pa_format_info_free(format);
}
if (!pa_tagstruct_eof(t))
@@ -1746,7 +1754,7 @@ static void setup_complete_callback(pa_pdispatch *pd, uint32_t command, uint32_t
#ifdef TUNNEL_SINK
if (u->version >= 21) {
/* We're not using the extended API, so n_formats = 0 and that's that */
- pa_tagstruct_putu8(t, 0);
+ pa_tagstruct_putu8(reply, 0);
}
#endif
commit 0636f4e6850b764dac25ff209415de60bfcde70d
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 13 14:48:34 2011 +0300
svolume: Make log messages more precise.
I was looking at a log, and noticed the following lines:
I [pulseaudio] svolume_mmx.c: Initialising MMX optimized functions.
I [pulseaudio] remap_mmx.c: Initialising MMX optimized remappers.
I [pulseaudio] svolume_sse.c: Initialising SSE2 optimized functions.
I [pulseaudio] remap_sse.c: Initialising SSE2 optimized remappers.
I [pulseaudio] sconv_sse.c: Initialising SSE2 optimized conversions.
It seemed odd that some messages were somewhat precise in
what functionality was initialized, while the svolume
messages told me that they had initialized just "functions".
So I made the svolume log messages more precise to match the
sconv and remap messages.
diff --git a/src/pulsecore/svolume_arm.c b/src/pulsecore/svolume_arm.c
index b779733..455d746 100644
--- a/src/pulsecore/svolume_arm.c
+++ b/src/pulsecore/svolume_arm.c
@@ -207,7 +207,7 @@ static void run_test(void) {
void pa_volume_func_init_arm(pa_cpu_arm_flag_t flags) {
#if defined (__arm__) && defined (HAVE_ARMV6)
- pa_log_info("Initialising ARM optimized functions.");
+ pa_log_info("Initialising ARM optimized volume functions.");
#ifdef RUN_TEST
run_test();
diff --git a/src/pulsecore/svolume_mmx.c b/src/pulsecore/svolume_mmx.c
index 6401081..a8a233d 100644
--- a/src/pulsecore/svolume_mmx.c
+++ b/src/pulsecore/svolume_mmx.c
@@ -335,7 +335,7 @@ void pa_volume_func_init_mmx(pa_cpu_x86_flag_t flags) {
#endif
if ((flags & PA_CPU_X86_MMX) && (flags & PA_CPU_X86_CMOV)) {
- pa_log_info("Initialising MMX optimized functions.");
+ pa_log_info("Initialising MMX optimized volume functions.");
pa_set_volume_func(PA_SAMPLE_S16NE, (pa_do_volume_func_t) pa_volume_s16ne_mmx);
pa_set_volume_func(PA_SAMPLE_S16RE, (pa_do_volume_func_t) pa_volume_s16re_mmx);
diff --git a/src/pulsecore/svolume_orc.c b/src/pulsecore/svolume_orc.c
index 8e1e46c..86f843e 100644
--- a/src/pulsecore/svolume_orc.c
+++ b/src/pulsecore/svolume_orc.c
@@ -127,7 +127,7 @@ static void run_test(void) {
#endif
void pa_volume_func_init_orc(void) {
- pa_log_info("Initialising ORC optimized functions.");
+ pa_log_info("Initialising ORC optimized volume functions.");
#ifdef RUN_TEST
run_test();
diff --git a/src/pulsecore/svolume_sse.c b/src/pulsecore/svolume_sse.c
index f713761..6a73270 100644
--- a/src/pulsecore/svolume_sse.c
+++ b/src/pulsecore/svolume_sse.c
@@ -342,7 +342,7 @@ void pa_volume_func_init_sse(pa_cpu_x86_flag_t flags) {
#endif
if (flags & PA_CPU_X86_SSE2) {
- pa_log_info("Initialising SSE2 optimized functions.");
+ pa_log_info("Initialising SSE2 optimized volume functions.");
pa_set_volume_func(PA_SAMPLE_S16NE, (pa_do_volume_func_t) pa_volume_s16ne_sse2);
pa_set_volume_func(PA_SAMPLE_S16RE, (pa_do_volume_func_t) pa_volume_s16re_sse2);
commit dccbefa394f16d3bd8e88526bf9b565ae9f1289e
Author: Tanu Kaskinen <tanuk at iki.fi>
Date: Sat Aug 13 14:35:31 2011 +0300
daemon-conf: Don't make log files executable.
diff --git a/src/daemon/daemon-conf.c b/src/daemon/daemon-conf.c
index 1f70b09..c4ee544 100644
--- a/src/daemon/daemon-conf.c
+++ b/src/daemon/daemon-conf.c
@@ -194,7 +194,7 @@ int pa_daemon_conf_set_log_target(pa_daemon_conf *c, const char *string) {
pa_strlcpy(file_path, string + 5, sizeof(file_path));
/* Open target file with user rights */
- if ((log_fd = open(file_path, O_RDWR|O_TRUNC|O_CREAT, S_IRWXU)) >= 0) {
+ if ((log_fd = open(file_path, O_RDWR|O_TRUNC|O_CREAT, S_IRUSR | S_IWUSR)) >= 0) {
c->auto_log_target = 0;
c->log_target = PA_LOG_FD;
pa_log_set_fd(log_fd);
commit 2f55da5baa0323af76510fd07c540f6dafcf1ac0
Author: Wang Xingchao <xingchao.wang at intel.com>
Date: Sat Aug 13 13:55:06 2011 +0200
sink-input: Avoid fake rewind in corked state
sink_input_request_rewind() does nothing if we are in the corked state.
Thus do not set the new state untill we have issued the rewind request.
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index 384647f..22de3bc 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -1752,8 +1752,6 @@ void pa_sink_input_set_state_within_thread(pa_sink_input *i, pa_sink_input_state
if (i->state_change)
i->state_change(i, state);
- i->thread_info.state = state;
-
if (corking) {
pa_log_debug("Requesting rewind due to corking");
@@ -1762,17 +1760,25 @@ void pa_sink_input_set_state_within_thread(pa_sink_input *i, pa_sink_input_state
* so that the unplayed already mixed data is not lost */
pa_sink_input_request_rewind(i, 0, TRUE, TRUE, FALSE);
+ /* Set the corked state *after* requesting rewind */
+ i->thread_info.state = state;
+
} else if (uncorking) {
+ pa_log_debug("Requesting rewind due to uncorking");
+
i->thread_info.underrun_for = (uint64_t) -1;
i->thread_info.playing_for = 0;
- pa_log_debug("Requesting rewind due to uncorking");
+ /* Set the uncorked state *before* requesting rewind */
+ i->thread_info.state = state;
/* OK, we're being uncorked. Make sure we're not rewound when
* the hw buffer is remixed and request a remix. */
pa_sink_input_request_rewind(i, 0, FALSE, TRUE, TRUE);
- }
+ } else
+ /* We may not be corking or uncorking, but we still need to set the state. */
+ i->thread_info.state = state;
}
/* Called from thread context, except when it is not. */
More information about the pulseaudio-commits
mailing list