mirror of
https://gitlab.gnome.org/GNOME/libgnome-volume-control.git
synced 2024-11-27 11:40:49 -05:00
gvc-mixer-control: Really fix double-free when setting headset
In a28e23d900
, 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.
This commit is contained in:
parent
8fc9c62a69
commit
25bf3ed75f
@ -2099,7 +2099,7 @@ sink_info_cb (pa_context *c,
|
|||||||
int j;
|
int j;
|
||||||
const char *s;
|
const char *s;
|
||||||
|
|
||||||
if (eol <= 0) {
|
if (eol != 0) {
|
||||||
port_status_data_free (data);
|
port_status_data_free (data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2135,7 +2135,7 @@ source_info_cb (pa_context *c,
|
|||||||
int j;
|
int j;
|
||||||
const char *s;
|
const char *s;
|
||||||
|
|
||||||
if (eol <= 0) {
|
if (eol != 0) {
|
||||||
port_status_data_free (data);
|
port_status_data_free (data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user