summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryangwei <[email protected]>2024-05-30 06:00:21 +0800
committeryangwei <[email protected]>2024-05-30 06:00:30 +0800
commit2e1fef341c44ad9a8066d3979920fa6a37f9994f (patch)
tree8f16590726d1eb7eb92b52fa517580aa2adca79a
parenta7adf2fe90bf44403dc486ae10e1af5ae6cafc37 (diff)
🐞 fix(dettach in ctx_new): fix call ctx_free until session free
-rw-r--r--src/plugin_manager/plugin_manager.c4
-rw-r--r--test/plugin_manager/plugin_manager_gtest_main.cpp3
-rw-r--r--test/plugin_manager/plugin_manager_gtest_mock.h1
3 files changed, 6 insertions, 2 deletions
diff --git a/src/plugin_manager/plugin_manager.c b/src/plugin_manager/plugin_manager.c
index 1760c6d..76a1c03 100644
--- a/src/plugin_manager/plugin_manager.c
+++ b/src/plugin_manager/plugin_manager.c
@@ -1088,12 +1088,12 @@ void stellar_session_plugin_dettach_current_session(struct session *sess)
}
//dettach in ctx INIT, do not call on_ctx_free immidiately
- if(plug_mgr_rt->plugin_ctx_array[plug_mgr_rt->current_session_plugin_id].state != INIT && session_plugin_schema->on_ctx_free)
+ if(plug_mgr_rt->plugin_ctx_array[plug_mgr_rt->current_session_plugin_id].state != INIT && (session_plugin_schema->on_ctx_free))
{
session_plugin_schema->on_ctx_free(sess, plug_mgr_rt->plugin_ctx_array[plug_mgr_rt->current_session_plugin_id].plugin_ctx, session_plugin_schema->plugin_env);
plug_mgr_rt->plugin_ctx_array[plug_mgr_rt->current_session_plugin_id].plugin_ctx=NULL;
- plug_mgr_rt->plugin_ctx_array[plug_mgr_rt->current_session_plugin_id].state=EXIT;
}
+ plug_mgr_rt->plugin_ctx_array[plug_mgr_rt->current_session_plugin_id].state=EXIT;
return;
}
diff --git a/test/plugin_manager/plugin_manager_gtest_main.cpp b/test/plugin_manager/plugin_manager_gtest_main.cpp
index edd8831..6b7a0e8 100644
--- a/test/plugin_manager/plugin_manager_gtest_main.cpp
+++ b/test/plugin_manager/plugin_manager_gtest_main.cpp
@@ -990,6 +990,7 @@ static void test_dettach_session_ctx_free(struct session *sess, void *session_ct
struct session_plugin_env *env = (struct session_plugin_env *)plugin_env;
env->basic_ctx_free_called+=1;
struct test_basic_ctx *ctx=(struct test_basic_ctx *)session_ctx;
+ EXPECT_EQ(sess->sess_pkt_cnt, 1);// first packet ingress, call ctx_free immediately
EXPECT_EQ(ctx->called, 1);
FREE(ctx);
}
@@ -1025,6 +1026,7 @@ TEST(plugin_manager, session_plugin_ctx_new_dettach) {
struct session sess[env.N_session];
+ memset(&sess, 0, sizeof(sess));
for(int i=0; i < env.N_session; i++)
sess[i].plug_mgr_rt=plugin_manager_session_runtime_new(plug_mgr, &sess[i]);
@@ -1036,6 +1038,7 @@ TEST(plugin_manager, session_plugin_ctx_new_dettach) {
for (int i = 0; i < env.N_session; i++)
{
+ sess[i].sess_pkt_cnt+=1;
plugin_manager_on_session_ingress(&sess[i], &pkt);
plugin_manager_on_session_egress(&sess[i], &pkt);
}
diff --git a/test/plugin_manager/plugin_manager_gtest_mock.h b/test/plugin_manager/plugin_manager_gtest_mock.h
index 605712e..a0d28b7 100644
--- a/test/plugin_manager/plugin_manager_gtest_mock.h
+++ b/test/plugin_manager/plugin_manager_gtest_mock.h
@@ -24,6 +24,7 @@ struct packet
struct session
{
struct plugin_manager_runtime *plug_mgr_rt;
+ int sess_pkt_cnt;
};
struct plugin_manager_schema * stellar_plugin_manager_schema_get(struct stellar *st)