mgcp-client: Create alloc() and free() internal APIs for mgcp_client_pool_member
Related: SYS#5987 Change-Id: Ibd2bf976885c777fe944652af6fe6eb0f1820468
This commit is contained in:
parent
ff5921573a
commit
6ddc79b6ed
|
@ -45,4 +45,6 @@ struct mgcp_client_pool {
|
||||||
|
|
||||||
struct mgcp_client_pool_member *mgcp_client_pool_find_member_by_nr(struct mgcp_client_pool *pool, unsigned int nr);
|
struct mgcp_client_pool_member *mgcp_client_pool_find_member_by_nr(struct mgcp_client_pool *pool, unsigned int nr);
|
||||||
|
|
||||||
|
struct mgcp_client_pool_member *mgcp_client_pool_member_alloc(struct mgcp_client_pool *pool, unsigned int nr);
|
||||||
|
void mgcp_client_pool_member_free(struct mgcp_client_pool_member *pool_member);
|
||||||
const char *mgcp_client_pool_member_name(const struct mgcp_client_pool_member *pool_member);
|
const char *mgcp_client_pool_member_name(const struct mgcp_client_pool_member *pool_member);
|
||||||
|
|
|
@ -228,3 +228,38 @@ void mgcp_client_pool_put(struct mgcp_client *mgcp_client)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***************************
|
||||||
|
* mgcp_client_pool_member:
|
||||||
|
***************************/
|
||||||
|
|
||||||
|
/*! Allocate an mgcp_client_pool_member.
|
||||||
|
* \param[in] pool MGCP client pool descriptor.
|
||||||
|
* \param[in] nr Reference number of the pool member.
|
||||||
|
*/
|
||||||
|
struct mgcp_client_pool_member *mgcp_client_pool_member_alloc(struct mgcp_client_pool *pool, unsigned int nr)
|
||||||
|
{
|
||||||
|
struct mgcp_client_pool_member *pool_member;
|
||||||
|
|
||||||
|
pool_member = talloc_zero(pool, struct mgcp_client_pool_member);
|
||||||
|
OSMO_ASSERT(pool_member);
|
||||||
|
mgcp_client_conf_init(&pool_member->conf);
|
||||||
|
pool_member->nr = nr;
|
||||||
|
llist_add_tail(&pool_member->list, &pool->member_list);
|
||||||
|
return pool_member;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! Free an mgcp_client_pool_member allocated through mgcp_client_pool_member_alloc().
|
||||||
|
* \param[in] pool_member MGCP client pool descriptor.
|
||||||
|
*
|
||||||
|
* It also frees the associated MGCP client if present.
|
||||||
|
*/
|
||||||
|
void mgcp_client_pool_member_free(struct mgcp_client_pool_member *pool_member)
|
||||||
|
{
|
||||||
|
llist_del(&pool_member->list);
|
||||||
|
if (pool_member->client) {
|
||||||
|
mgcp_client_disconnect(pool_member->client);
|
||||||
|
talloc_free(pool_member->client);
|
||||||
|
}
|
||||||
|
talloc_free(pool_member);
|
||||||
|
}
|
||||||
|
|
|
@ -345,11 +345,8 @@ DEFUN_ATTR(cfg_mgw,
|
||||||
|
|
||||||
pool_member = mgcp_client_pool_find_member_by_nr(global_mgcp_client_pool, nr);
|
pool_member = mgcp_client_pool_find_member_by_nr(global_mgcp_client_pool, nr);
|
||||||
if (!pool_member) {
|
if (!pool_member) {
|
||||||
pool_member = talloc_zero(global_mgcp_client_pool, struct mgcp_client_pool_member);
|
pool_member = mgcp_client_pool_member_alloc(global_mgcp_client_pool, nr);
|
||||||
OSMO_ASSERT(pool_member);
|
OSMO_ASSERT(pool_member);
|
||||||
mgcp_client_conf_init(&pool_member->conf);
|
|
||||||
pool_member->nr = nr;
|
|
||||||
llist_add_tail(&pool_member->list, &global_mgcp_client_pool->member_list);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vty->index = &pool_member->conf;
|
vty->index = &pool_member->conf;
|
||||||
|
@ -379,12 +376,7 @@ DEFUN_ATTR(cfg_no_mgw,
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
}
|
}
|
||||||
|
|
||||||
llist_del(&pool_member->list);
|
mgcp_client_pool_member_free(pool_member);
|
||||||
if (pool_member->client) {
|
|
||||||
mgcp_client_disconnect(pool_member->client);
|
|
||||||
talloc_free(pool_member->client);
|
|
||||||
}
|
|
||||||
talloc_free(pool_member);
|
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue