mgcp-client: Rearrange internal backpointers
Let's properly store backpointers so that it is easy to access all
relation chain (pool<->pool_member<->mgcp_client).
Related: SYS#5987
Change-Id: I5ec2465075da2e3c8eabca9df60681620a7db499
diff --git a/src/libosmo-mgcp-client/mgcp_client_pool.c b/src/libosmo-mgcp-client/mgcp_client_pool.c
index 00c0868..bee3555 100644
--- a/src/libosmo-mgcp-client/mgcp_client_pool.c
+++ b/src/libosmo-mgcp-client/mgcp_client_pool.c
@@ -55,7 +55,7 @@
llist_for_each_entry(pool_member, &pool->member_list, list) {
/* Initialize client */
- if (mgcp_client_pool_member_reinit_client(pool_member, pool) == 0)
+ if (mgcp_client_pool_member_reinit_client(pool_member) == 0)
pool_members_initialized++;
}
@@ -165,25 +165,19 @@
void mgcp_client_pool_put(struct mgcp_client *mgcp_client)
{
struct mgcp_client_pool_member *pool_member;
- struct mgcp_client_pool *pool;
if (!mgcp_client)
return;
- if (mgcp_client->pool)
- pool = mgcp_client->pool;
- else
+ if (!mgcp_client->pool_member)
return;
+ pool_member = mgcp_client->pool_member;
- llist_for_each_entry(pool_member, &pool->member_list, list) {
- if (pool_member->client == mgcp_client) {
- if (pool_member->refcount == 0) {
- LOGPPMGW(pool_member, LOGL_ERROR, "MGW pool member has invalid refcount\n");
- return;
- }
- pool_member->refcount--;
- }
+ if (pool_member->refcount == 0) {
+ LOGPPMGW(pool_member, LOGL_ERROR, "MGW pool member has invalid refcount\n");
+ return;
}
+ pool_member->refcount--;
}
/***************************
@@ -201,6 +195,7 @@
pool_member = talloc_zero(pool, struct mgcp_client_pool_member);
OSMO_ASSERT(pool_member);
mgcp_client_conf_init(&pool_member->conf);
+ pool_member->pool = pool;
pool_member->nr = nr;
llist_add_tail(&pool_member->list, &pool->member_list);
return pool_member;
@@ -224,7 +219,7 @@
/*! Recreate and reconnect the MGCP client associated to the pool descriptor.
* \param[in] pool_member MGCP client pool descriptor.
*/
-int mgcp_client_pool_member_reinit_client(struct mgcp_client_pool_member *pool_member, struct mgcp_client_pool *pool)
+int mgcp_client_pool_member_reinit_client(struct mgcp_client_pool_member *pool_member)
{
/* Get rid of a possibly existing old MGCP client instance first */
if (pool_member->client) {
@@ -240,7 +235,7 @@
}
/* Set backpointer so that we can detect later that this MGCP client is managed by this pool. */
- pool_member->client->pool = pool;
+ pool_member->client->pool_member = pool_member;
/* Connect client */
if (mgcp_client_connect2(pool_member->client, 0)) {
diff --git a/src/libosmo-mgcp-client/mgcp_client_vty.c b/src/libosmo-mgcp-client/mgcp_client_vty.c
index 81f8f3e..a823b0c 100644
--- a/src/libosmo-mgcp-client/mgcp_client_vty.c
+++ b/src/libosmo-mgcp-client/mgcp_client_vty.c
@@ -401,7 +401,7 @@
return CMD_WARNING;
}
- if (mgcp_client_pool_member_reinit_client(pool_member, global_mgcp_client_pool) < 0) {
+ if (mgcp_client_pool_member_reinit_client(pool_member) < 0) {
LOGP(DLMGCP, LOGL_ERROR, "(manual) MGW %s connect failed at (%s:%u)\n",
mgcp_client_pool_member_name(pool_member), pool_member->conf.remote_addr,
pool_member->conf.remote_port);