miniobject: free qdata array when the last qdata is removed

In cases with many long-lived buffers that have qdata only very
briefly, the memory overhead of keeping an array of 16 GstQData
structs for each buffer can be significant. We free the array when
the last qdata is removed, like it was done in 1.14.

Fixes #436
This commit is contained in:
David Svensson Fors 2019-09-03 10:38:13 +02:00 committed by Tim-Philipp Müller
parent 94ba1cea88
commit e6bd5b4193

View file

@ -506,7 +506,12 @@ remove_notify (GstMiniObject * object, gint index)
/* remove item */ /* remove item */
priv_data->n_qdata--; priv_data->n_qdata--;
if (index != priv_data->n_qdata) { if (priv_data->n_qdata == 0) {
/* we don't shrink but free when everything is gone */
g_free (priv_data->qdata);
priv_data->qdata = NULL;
priv_data->n_qdata_len = 0;
} else if (index != priv_data->n_qdata) {
QDATA (priv_data, index) = QDATA (priv_data, priv_data->n_qdata); QDATA (priv_data, index) = QDATA (priv_data, priv_data->n_qdata);
} }
} }