diff options
| author | yangwei <[email protected]> | 2024-05-30 06:00:21 +0800 |
|---|---|---|
| committer | yangwei <[email protected]> | 2024-05-30 06:00:30 +0800 |
| commit | 2e1fef341c44ad9a8066d3979920fa6a37f9994f (patch) | |
| tree | 8f16590726d1eb7eb92b52fa517580aa2adca79a | |
| parent | a7adf2fe90bf44403dc486ae10e1af5ae6cafc37 (diff) | |
🐞 fix(dettach in ctx_new): fix call ctx_free until session free
| -rw-r--r-- | src/plugin_manager/plugin_manager.c | 4 | ||||
| -rw-r--r-- | test/plugin_manager/plugin_manager_gtest_main.cpp | 3 | ||||
| -rw-r--r-- | test/plugin_manager/plugin_manager_gtest_mock.h | 1 |
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) |
