return -1;
}
+/* Releases transport allocations owned by <ns>. */
+void dns_nameserver_deinit(struct dns_nameserver *ns)
+{
+ if (ns->dgram) {
+ dns_ring_free(ns->dgram->ring_req);
+ free(ns->dgram);
+ ns->dgram = NULL;
+ }
+
+ if (ns->stream) {
+ dns_ring_free(ns->stream->ring_req);
+ task_destroy(ns->stream->task_req);
+ task_destroy(ns->stream->task_rsp);
+ task_destroy(ns->stream->task_idle);
+ free(ns->stream);
+ ns->stream = NULL;
+ }
+}
+
int init_dns_buffers()
{
dns_msg_trash = malloc(DNS_TCP_MSG_MAX_SIZE);
if (errmsg)
memprintf(errmsg, "parsing [/etc/resolv.conf:%d] : out of memory.", resolv_linenum);
err_code |= ERR_ALERT | ERR_FATAL;
- dns_ring_free(newnameserver->dgram->ring_req);
- free(newnameserver->dgram);
+ dns_nameserver_deinit(newnameserver);
free(newnameserver);
goto resolv_out;
}
memprintf(errmsg, "parsing [/etc/resolv.conf:%d] : out of memory.", resolv_linenum);
err_code |= ERR_ALERT | ERR_FATAL;
free((char *)newnameserver->conf.file);
- dns_ring_free(newnameserver->dgram->ring_req);
- free(newnameserver->dgram);
+ dns_nameserver_deinit(newnameserver);
free(newnameserver);
goto resolv_out;
}
if ((newnameserver->conf.file = strdup(file)) == NULL) {
ha_alert("parsing [%s:%d] : out of memory.\n", file, linenum);
err_code |= ERR_ALERT | ERR_ABORT;
- if (newnameserver->stream) {
- dns_ring_free(newnameserver->stream->ring_req);
- task_destroy(newnameserver->stream->task_req);
- task_destroy(newnameserver->stream->task_rsp);
- task_destroy(newnameserver->stream->task_idle);
- free(newnameserver->stream);
- } else if (newnameserver->dgram) {
- dns_ring_free(newnameserver->dgram->ring_req);
- free(newnameserver->dgram);
- }
+ dns_nameserver_deinit(newnameserver);
free(newnameserver);
goto out;
}
ha_alert("parsing [%s:%d] : out of memory.\n", file, linenum);
err_code |= ERR_ALERT | ERR_ABORT;
free((char *)newnameserver->conf.file);
- if (newnameserver->stream) {
- dns_ring_free(newnameserver->stream->ring_req);
- task_destroy(newnameserver->stream->task_req);
- task_destroy(newnameserver->stream->task_rsp);
- task_destroy(newnameserver->stream->task_idle);
- free(newnameserver->stream);
- } else if (newnameserver->dgram) {
- dns_ring_free(newnameserver->dgram->ring_req);
- free(newnameserver->dgram);
- }
+ dns_nameserver_deinit(newnameserver);
free(newnameserver);
goto out;
}