55 lines
1.7 KiB
Diff
55 lines
1.7 KiB
Diff
From 25bf3ed75fa604fa73e8b25241119a993fc659d6 Mon Sep 17 00:00:00 2001
|
|
From: Bastien Nocera <hadess@hadess.net>
|
|
Date: Sun, 17 Apr 2016 22:27:47 +0200
|
|
Subject: [PATCH] gvc-mixer-control: Really fix double-free when setting
|
|
headset
|
|
|
|
In a28e23d9006a32c8982ad8bda11fec131c6b36e8, we said:
|
|
The callbacks will be called repeatedly, once with data, and later
|
|
on with eol == 0. Make sure to only free it when we get the eol call
|
|
instead of once we've applied the settings.
|
|
|
|
Whereas the docs say:
|
|
When requesting all of these [instances] at once, the callback will be
|
|
called multiple times, once for each object. When the list has been
|
|
exhausted, the callback will be called without an information structure
|
|
and the eol parameter set to a positive value.
|
|
|
|
If an error occurs, the callback will be invoked without an information
|
|
structure and eol set to a negative value.
|
|
|
|
So, in all, we need to free our callback data when eol is positive, or
|
|
negative. So, when it's not 0.
|
|
|
|
Seems we got lucky in the original commit because the test machine only
|
|
had a single soundcard.
|
|
---
|
|
gvc-mixer-control.c | 4 ++--
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/gvc-mixer-control.c b/gvc-mixer-control.c
|
|
index 5fb1f31..760b05d 100644
|
|
--- a/gvc-mixer-control.c
|
|
+++ b/gvc-mixer-control.c
|
|
@@ -2099,7 +2099,7 @@ sink_info_cb (pa_context *c,
|
|
int j;
|
|
const char *s;
|
|
|
|
- if (eol <= 0) {
|
|
+ if (eol != 0) {
|
|
port_status_data_free (data);
|
|
return;
|
|
}
|
|
@@ -2135,7 +2135,7 @@ source_info_cb (pa_context *c,
|
|
int j;
|
|
const char *s;
|
|
|
|
- if (eol <= 0) {
|
|
+ if (eol != 0) {
|
|
port_status_data_free (data);
|
|
return;
|
|
}
|
|
--
|
|
2.7.3
|
|
|