]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_resolver_unbound.c: Fix frequent ref leak caught by excessive ref trap. 66/4866/1
authorRichard Mudgett <rmudgett@digium.com>
Wed, 1 Feb 2017 23:14:53 +0000 (17:14 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 1 Feb 2017 23:30:50 +0000 (17:30 -0600)
ASTERISK-26765

Change-Id: I27eb97df7f8d7e624b0b9a61c0fcee4718c86d8d

res/res_resolver_unbound.c

index 348e04f9340ea6446088d675bae5d84ad83b8aa4..f34985255e89f6306533f2cdb10381c46bd34920 100644 (file)
@@ -288,13 +288,21 @@ static void unbound_resolver_callback(void *data, int err, struct ub_result *ub_
        ub_resolve_free(ub_result);
 }
 
+static void unbound_resolver_data_dtor(void *vdoomed)
+{
+       struct unbound_resolver_data *doomed = vdoomed;
+
+       ao2_cleanup(doomed->resolver);
+}
+
 static int unbound_resolver_resolve(struct ast_dns_query *query)
 {
        struct unbound_config *cfg = ao2_global_obj_ref(globals);
        struct unbound_resolver_data *data;
        int res;
 
-       data = ao2_alloc_options(sizeof(*data), NULL, AO2_ALLOC_OPT_LOCK_NOLOCK);
+       data = ao2_alloc_options(sizeof(*data), unbound_resolver_data_dtor,
+               AO2_ALLOC_OPT_LOCK_NOLOCK);
        if (!data) {
                ast_log(LOG_ERROR, "Failed to allocate resolver data for resolution of '%s'\n",
                        ast_dns_query_get_name(query));