return r;
// Load zones
- r = nw_zones_load(&daemon->zones);
+ r = nw_zones_load(&daemon->zones, daemon);
if (r)
return r;
#include <systemd/sd-bus.h>
#include "config.h"
+#include "daemon.h"
#include "logging.h"
#include "string.h"
#include "zone.h"
struct nw_zone {
+ nw_daemon* daemon;
int nrefs;
char name[NETWORK_ZONE_NAME_MAX_LENGTH];
static void nw_zone_free(nw_zone* zone) {
if (zone->config)
nw_config_unref(zone->config);
+ if (zone->daemon)
+ nw_daemon_unref(zone->daemon);
free(zone);
}
return 0;
}
-int nw_zone_create(nw_zone** zone, const char* name) {
+int nw_zone_create(nw_zone** zone, nw_daemon* daemon, const char* name) {
int r;
// Allocate a new object
if (!z)
return 1;
+ // Store a reference to the daemon
+ z->daemon = nw_daemon_ref(daemon);
+
// Initialize reference counter
z->nrefs = 1;
typedef struct nw_zone nw_zone;
-int nw_zone_create(nw_zone** zone, const char* name);
+#include "daemon.h"
+
+int nw_zone_create(nw_zone** zone, nw_daemon* daemon, const char* name);
nw_zone* nw_zone_ref(nw_zone* zone);
nw_zone* nw_zone_unref(nw_zone* zone);
#include <string.h>
#include <sys/queue.h>
+#include "daemon.h"
#include "logging.h"
#include "zone.h"
#include "zones.h"
};
struct nw_zones {
+ nw_daemon* daemon;
int nrefs;
// Zone Entries
unsigned int num;
};
-static int nw_zones_create(nw_zones** zones) {
+static int nw_zones_create(nw_zones** zones, nw_daemon* daemon) {
nw_zones* z = calloc(1, sizeof(*z));
if (!z)
return 1;
+ // Store a reference to the daemon
+ z->daemon = nw_daemon_ref(daemon);
+
// Initialize the reference counter
z->nrefs = 1;
// Free the entry
free(entry);
}
+
+ if (zones->daemon)
+ nw_daemon_unref(zones->daemon);
+
+ free(zones);
}
nw_zones* nw_zones_ref(nw_zones* zones) {
DEBUG("Loading zone '%s'...\n", name);
// Create a new zone object
- r = nw_zone_create(&zone, name);
+ r = nw_zone_create(&zone, zones->daemon, name);
if (r)
goto ERROR;
return r;
}
-int nw_zones_load(nw_zones** zones) {
+int nw_zones_load(nw_zones** zones, nw_daemon* daemon) {
int r;
// Create a new zones object
- r = nw_zones_create(zones);
+ r = nw_zones_create(zones, daemon);
if (r)
return r;
typedef struct nw_zones nw_zones;
+#include "daemon.h"
+
nw_zones* nw_zones_ref(nw_zones* zones);
nw_zones* nw_zones_unref(nw_zones* zones);
-int nw_zones_load(nw_zones** zones);
+int nw_zones_load(nw_zones** zones, nw_daemon* daemon);
size_t nw_zones_num(nw_zones* zones);