summaryrefslogtreecommitdiffstats
path: root/contrib/bind/lib/irs/irs_data.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bind/lib/irs/irs_data.c')
-rw-r--r--contrib/bind/lib/irs/irs_data.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/contrib/bind/lib/irs/irs_data.c b/contrib/bind/lib/irs/irs_data.c
index 000da0c..f69a6b4 100644
--- a/contrib/bind/lib/irs/irs_data.c
+++ b/contrib/bind/lib/irs/irs_data.c
@@ -16,7 +16,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "$Id: irs_data.c,v 1.19 2001/08/20 07:08:41 marka Exp $";
+static const char rcsid[] = "$Id: irs_data.c,v 1.20.2.1 2003/06/02 10:09:48 marka Exp $";
#endif
#include "port_before.h"
@@ -38,6 +38,7 @@ static const char rcsid[] = "$Id: irs_data.c,v 1.19 2001/08/20 07:08:41 marka Ex
#endif
#include <irs.h>
+#include <stdlib.h>
#include "port_after.h"
@@ -97,6 +98,14 @@ net_data_destroy(void *p) {
(*net_data->ng->close)(net_data->ng);
net_data->ng = NULL;
}
+ if (net_data->ho_data != NULL) {
+ free(net_data->ho_data);
+ net_data->ho_data = NULL;
+ }
+ if (net_data->nw_data != NULL) {
+ free(net_data->nw_data);
+ net_data->nw_data = NULL;
+ }
(*net_data->irs->close)(net_data->irs);
memput(net_data, sizeof *net_data);
@@ -143,19 +152,27 @@ net_data_create(const char *conf_file) {
return (NULL);
memset(net_data, 0, sizeof (struct net_data));
- if ((net_data->irs = irs_gen_acc("", conf_file)) == NULL)
+ if ((net_data->irs = irs_gen_acc("", conf_file)) == NULL) {
+ memput(net_data, sizeof (struct net_data));
return (NULL);
+ }
#ifndef DO_PTHREADS
(*net_data->irs->res_set)(net_data->irs, &_res, NULL);
#endif
net_data->res = (*net_data->irs->res_get)(net_data->irs);
- if (net_data->res == NULL)
+ if (net_data->res == NULL) {
+ (*net_data->irs->close)(net_data->irs);
+ memput(net_data, sizeof (struct net_data));
return (NULL);
+ }
if ((net_data->res->options & RES_INIT) == 0 &&
- res_ninit(net_data->res) == -1)
+ res_ninit(net_data->res) == -1) {
+ (*net_data->irs->close)(net_data->irs);
+ memput(net_data, sizeof (struct net_data));
return (NULL);
+ }
return (net_data);
}
OpenPOWER on IntegriCloud