diff options
author | Laurent Ghigonis <laurent@p1sec.com> | 2012-12-13 17:22:21 +0100 |
---|---|---|
committer | Laurent Ghigonis <laurent@p1sec.com> | 2012-12-13 17:22:21 +0100 |
commit | 9e0139c4343d7032de3a3bbb4408914fa943ec45 (patch) | |
tree | 4c9d095eaaa4fb1e23391a7134a6cd77688f8812 | |
parent | adapt to use libggnet group parenting (diff) | |
download | glouglou-9e0139c4343d7032de3a3bbb4408914fa943ec45.tar.xz glouglou-9e0139c4343d7032de3a3bbb4408914fa943ec45.zip |
keep track of group connection usage
-rw-r--r-- | libglouglou/libggnet.c | 12 | ||||
-rw-r--r-- | libglouglou/libggnet.h | 1 |
2 files changed, 13 insertions, 0 deletions
diff --git a/libglouglou/libggnet.c b/libglouglou/libggnet.c index cfed99e..71a21cc 100644 --- a/libglouglou/libggnet.c +++ b/libglouglou/libggnet.c @@ -166,10 +166,14 @@ ggnet_conn_add(struct ggnet *net, struct in_addr *src, int src_port, if (!srcnode) srcnode = ggnet_node_add(net, src); srcnode->used++; + if (srcnode->group) + srcnode->group->conn_count++; dstnode = ggnet_node_find(net, dst); if (!dstnode) dstnode = ggnet_node_add(net, dst); dstnode->used++; + if (dstnode->group) + dstnode->group->conn_count++; c = xmalloc(sizeof(struct ggnet_conn)); c->id = id; @@ -230,7 +234,11 @@ ggnet_conn_del(struct ggnet *net, struct ggnet_conn *c) } c->src->used--; + if (c->src->group) + c->src->group->conn_count--; c->dst->used--; + if (c->dst->group) + c->dst->group->conn_count--; LIST_REMOVE(c, entry); free(c); @@ -362,6 +370,10 @@ nodegroup_add(struct ggnet *net, enum ggnet_grouptype type, void *param, static void nodegroup_del(struct ggnet *net, struct ggnet_nodegroup *group) { + if (group->node_count || group->conn_count) + gg_log_fatal("ggnet_nodegroup_del: trying to remove a used group !"); + gg_log_debug("ggnet_nodegroup_del"); + net->cb_delgroup(net, group); if (group->parent) { group->parent->child_groups_count--; diff --git a/libglouglou/libggnet.h b/libglouglou/libggnet.h index c705cc5..7eb14a8 100644 --- a/libglouglou/libggnet.h +++ b/libglouglou/libggnet.h @@ -32,6 +32,7 @@ struct ggnet_nodegroup { struct in_addr addr; char name[GGNET_DNSNAME_MAX]; int node_count; + int conn_count; int child_groups_count; void *usrdata; }; |