dfilter: Pass a value by reference

The lifetime of the reference is longer than the runtime so avoid
an unecessary fvalue dup.
This commit is contained in:
João Valverde 2022-10-28 15:44:30 +01:00
parent 0583b76204
commit 31a0147daa
1 changed files with 5 additions and 6 deletions

View File

@ -671,20 +671,20 @@ filter_refs_fvalues(GPtrArray *refs_array, drange_t *range)
int layer = ref->proto_layer_num;
if (range == NULL) {
fvalues = g_slist_prepend(fvalues, fvalue_dup(ref->value));
fvalues = g_slist_prepend(fvalues, ref->value);
continue;
}
if (cookie == layer) {
if (cookie_matches) {
fvalues = g_slist_prepend(fvalues, fvalue_dup(ref->value));
fvalues = g_slist_prepend(fvalues, ref->value);
}
}
else {
cookie = layer;
cookie_matches = drange_contains_layer(range, layer, length);
if (cookie_matches) {
fvalues = g_slist_prepend(fvalues, fvalue_dup(ref->value));
fvalues = g_slist_prepend(fvalues, ref->value);
}
}
}
@ -723,10 +723,9 @@ read_reference(dfilter_t *df, dfvm_value_t *arg1, dfvm_value_t *arg2,
return FALSE;
}
/* Shallow copy */
df->registers[reg] = filter_refs_fvalues(refs, range);
/* Creates new value so own it. */
df->free_registers[reg] = (GDestroyNotify)fvalue_free;
// These values are referenced only, do not try to free it later.
df->free_registers[reg] = NULL;
return TRUE;
}