自由直径 - fd_sess_handler_create
freeDiameter - fd_sess_handler_create
我刚刚有一个关于 freeDiameter 库中的 "fd_sess_handler_create" 函数的问题。
嗯,在 test_app 扩展中,有一个 ta_cli_init 函数来初始化客户端程序,当代码在 C 中时,这个块编译得很好 :
int ta_cli_init(void)
{
CHECK_FCT( fd_sess_handler_create(&ta_cli_reg, (void*)free, NULL, NULL) );
CHECK_FCT( fd_event_trig_regcb(ta_conf->signal, "test_app.cli", ta_cli_test_message ) );
return 0;
}
但是,一旦我将代码更改为 C++,编译器就开始唠叨 "cleanup" 参数(第二个参数),我必须更改代码才能编译它:
void sess_handler_free(struct sess_state * state, os0_t sid, void * opaque)
{
}
int ta_cli_init(void)
{
CHECK_FCT( fd_sess_handler_create(&ta_cli_reg, &sess_handler_free, NULL, NULL) );
CHECK_FCT( fd_event_trig_regcb(ta_conf->signal, "ocs_app.cli", ta_cli_test_message ) );
return 0;
}
代码现在可以编译了,但是因为我不确定清理上下文,如你所见,我把它留空了。
你能给我解释一下我的自定义 sess_handler_free 函数体中到底应该清理什么吗?
sess_handler_free
需要释放 struct sess_state
加上 您的代码附加到它的任何其他数据结构。
如果您没有任何额外的数据结构,您应该只使用 beable sess_handler_free
call free(state)
。 (直接传递 free 函数是另一种方法。)
如果您确实有其他数据结构,则需要从 struct sess_state
中找到它们,如果它们是使用 new
或 [=17= 创建的,则使用 delete
释放它们] 如果它们是使用 malloc
.
创建的
将 diameap_cli_sess_cleanup
作为示例实现 - 请注意,它会检查 methodData
、user.password
和 user.userid
字段,如果存在则释放它们,然后再释放 struct sess_state
本身 - 这个扩展分配了这些字段,所以它负责释放它们。
我刚刚有一个关于 freeDiameter 库中的 "fd_sess_handler_create" 函数的问题。
嗯,在 test_app 扩展中,有一个 ta_cli_init 函数来初始化客户端程序,当代码在 C 中时,这个块编译得很好 :
int ta_cli_init(void)
{
CHECK_FCT( fd_sess_handler_create(&ta_cli_reg, (void*)free, NULL, NULL) );
CHECK_FCT( fd_event_trig_regcb(ta_conf->signal, "test_app.cli", ta_cli_test_message ) );
return 0;
}
但是,一旦我将代码更改为 C++,编译器就开始唠叨 "cleanup" 参数(第二个参数),我必须更改代码才能编译它:
void sess_handler_free(struct sess_state * state, os0_t sid, void * opaque)
{
}
int ta_cli_init(void)
{
CHECK_FCT( fd_sess_handler_create(&ta_cli_reg, &sess_handler_free, NULL, NULL) );
CHECK_FCT( fd_event_trig_regcb(ta_conf->signal, "ocs_app.cli", ta_cli_test_message ) );
return 0;
}
代码现在可以编译了,但是因为我不确定清理上下文,如你所见,我把它留空了。
你能给我解释一下我的自定义 sess_handler_free 函数体中到底应该清理什么吗?
sess_handler_free
需要释放 struct sess_state
加上 您的代码附加到它的任何其他数据结构。
如果您没有任何额外的数据结构,您应该只使用 beable sess_handler_free
call free(state)
。 (直接传递 free 函数是另一种方法。)
如果您确实有其他数据结构,则需要从 struct sess_state
中找到它们,如果它们是使用 new
或 [=17= 创建的,则使用 delete
释放它们] 如果它们是使用 malloc
.
将 diameap_cli_sess_cleanup
作为示例实现 - 请注意,它会检查 methodData
、user.password
和 user.userid
字段,如果存在则释放它们,然后再释放 struct sess_state
本身 - 这个扩展分配了这些字段,所以它负责释放它们。