summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryangwei <[email protected]>2024-03-20 18:49:08 +0800
committeryangwei <[email protected]>2024-03-20 18:49:08 +0800
commit3b6bcd5348c1d29baa8ef4f587043985a380fbbb (patch)
treea8f8c1d9ba71feb8fe0f27a0847e0c0e033e0781
parent3c5de4052408f5b4cc272a05db2237980a97c918 (diff)
🎈 perf(session_get_direction): cache session direction after first call
-rw-r--r--src/adapter/adapter.c7
-rw-r--r--src/adapter/session_manager.c1
-rw-r--r--src/adapter/session_manager.h1
3 files changed, 6 insertions, 3 deletions
diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c
index ad90236..302b694 100644
--- a/src/adapter/adapter.c
+++ b/src/adapter/adapter.c
@@ -303,6 +303,7 @@ const char *packet_get0_data(const struct packet *pkt, size_t *data_len)
int session_get_direction(struct session *sess)
{
+ if(sess->session_direction>=0)return sess->session_direction;
if(sess->cur_pkt && sess->cur_pkt->a_stream)
{
//int c2s_router_dir=(sess->cur_pkt->a_stream->curdir==DIR_C2S)?(sess->cur_pkt->a_stream->routedir):((sess->cur_pkt->a_stream->routedir)^1);
@@ -312,14 +313,14 @@ int session_get_direction(struct session *sess)
int dir=MESA_dir_link_to_human(c2s_router_dir);
if(dir == (int)'I')
{
- return SESSION_DIRECTION_IN;
+ sess->session_direction=SESSION_DIRECTION_IN;
}
if(dir == (int)'E')
{
- return SESSION_DIRECTION_OUT;
+ sess->session_direction=SESSION_DIRECTION_OUT;
}
}
- return -1;
+ return sess->session_direction;
}
int session_is_symmetric(struct session *sess, unsigned char *flag)
diff --git a/src/adapter/session_manager.c b/src/adapter/session_manager.c
index 594bd63..5bfc854 100644
--- a/src/adapter/session_manager.c
+++ b/src/adapter/session_manager.c
@@ -372,6 +372,7 @@ struct session *session_new(struct stellar *st, enum session_type type, int thre
sess->st = st;
sess->type = type;
sess->state = SESSION_STATE_OPENING;
+ sess->session_direction=-1;
sess->mq = NULL;
sess->mq_sub_status=CALLOC(char, st->topic_num*st->sub_num);
memset(sess->mq_sub_status, 1, st->topic_num*st->sub_num);
diff --git a/src/adapter/session_manager.h b/src/adapter/session_manager.h
index f566bfe..e6cc673 100644
--- a/src/adapter/session_manager.h
+++ b/src/adapter/session_manager.h
@@ -15,6 +15,7 @@ struct session
{
enum session_type type;
enum session_state state;
+ int session_direction;
struct packet *cur_pkt;
session_packet_free *cur_pkt_free_cb;
void *cur_pkt_free_arg;