[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Missing qapi_free_Type in error case for qapi generated code?
From: |
Christophe de Dinechin |
Subject: |
Missing qapi_free_Type in error case for qapi generated code? |
Date: |
Tue, 28 Jul 2020 17:26:57 +0200 |
User-agent: |
mu4e 1.5.2; emacs 26.3 |
The qapi generated code for qmp_marshal_query_spice seems to be missing a
resource deallocation for "retval". For example, for SpiceInfo:
#if defined(CONFIG_SPICE)
void qmp_marshal_query_spice(QDict *args, QObject **ret, Error **errp)
{
Error *err = NULL;
bool ok = false;
Visitor *v;
SpiceInfo *retval;
v = qobject_input_visitor_new(QOBJECT(args));
if (!visit_start_struct(v, NULL, NULL, 0, errp)) {
goto out;
}
ok = visit_check_struct(v, errp);
visit_end_struct(v, NULL);
if (!ok) {
goto out;
}
retval = qmp_query_spice(&err);
error_propagate(errp, err);
if (err) {
/* retval not freed here */
/* Missing: qapi_free_SpiceInfo(retval); */
goto out;
}
qmp_marshal_output_SpiceInfo(retval, ret, errp);
out:
visit_free(v);
v = qapi_dealloc_visitor_new();
visit_start_struct(v, NULL, NULL, 0, NULL);
visit_end_struct(v, NULL);
visit_free(v);
}
#endif /* defined(CONFIG_SPICE) */
Questions:
- Is the query code supposed to always return NULL in case of error? In the
case of hmp_info_spice, there is no check for info==NULL, so on the
contrary, it seems to indicate that a non-null result is always expected,
and that function does call qapi_free_SpiceInfo
- If not, is there an existing shortcut to generate the correct deallocation
code for return types that need it? You can't just use
qapi_free_%(c_type)s because that would generate an extra * character,
i.e. I get "SpiceInfo *" and not "SpiceInfo".
- If not, is there any good way to know if the type is a pointer type?
(A quick look in cripts/qapi/types.py does not show anything obvious)
--
Cheers,
Christophe de Dinechin (IRC c3d)
- Missing qapi_free_Type in error case for qapi generated code?,
Christophe de Dinechin <=