Fix memory leak in gdkscreen-x11
When RandR 1.2 X driver doesn't return any usable multihead data the monitors array is freed, without freeing the memory allocated by the array elements before. Fixes bug #578354
This commit is contained in:
committed by
Matthias Clasen
parent
f0b4779d56
commit
5261d14d6f
@ -663,6 +663,21 @@ init_fake_xinerama (GdkScreen *screen)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
free_monitors (GdkX11Monitor *monitors,
|
||||||
|
gint n_monitors)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < n_monitors; ++i)
|
||||||
|
{
|
||||||
|
g_free (monitors[i].output_name);
|
||||||
|
g_free (monitors[i].manufacturer);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (monitors);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
monitor_compare_function (GdkX11Monitor *monitor1,
|
monitor_compare_function (GdkX11Monitor *monitor1,
|
||||||
GdkX11Monitor *monitor2)
|
GdkX11Monitor *monitor2)
|
||||||
@ -753,7 +768,11 @@ init_randr13 (GdkScreen *screen)
|
|||||||
/* non RandR 1.2 X driver doesn't return any usable multihead data */
|
/* non RandR 1.2 X driver doesn't return any usable multihead data */
|
||||||
if (randr12_compat)
|
if (randr12_compat)
|
||||||
{
|
{
|
||||||
g_array_free (monitors, TRUE);
|
guint n_monitors = monitors->len;
|
||||||
|
|
||||||
|
free_monitors ((GdkX11Monitor *)g_array_free (monitors, FALSE),
|
||||||
|
n_monitors);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -856,21 +875,6 @@ init_xfree_xinerama (GdkScreen *screen)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
free_monitors (GdkX11Monitor *monitors,
|
|
||||||
gint n_monitors)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < n_monitors; ++i)
|
|
||||||
{
|
|
||||||
g_free (monitors[i].output_name);
|
|
||||||
g_free (monitors[i].manufacturer);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free (monitors);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
deinit_multihead (GdkScreen *screen)
|
deinit_multihead (GdkScreen *screen)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user