From f8d70b475cf449405aa324dcf8e6830fd12c89e6 Mon Sep 17 00:00:00 2001 From: David Svensson Fors Date: Tue, 3 Sep 2019 10:38:13 +0200 Subject: [PATCH] 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 --- gst/gstminiobject.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gst/gstminiobject.c b/gst/gstminiobject.c index c6dd87d..ef0028b 100644 --- a/gst/gstminiobject.c +++ b/gst/gstminiobject.c @@ -506,7 +506,12 @@ remove_notify (GstMiniObject * object, gint index) /* remove item */ 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); } } -- 2.7.4