diff options
| author | yangwei <[email protected]> | 2024-03-20 18:49:08 +0800 |
|---|---|---|
| committer | yangwei <[email protected]> | 2024-03-20 18:49:08 +0800 |
| commit | 3b6bcd5348c1d29baa8ef4f587043985a380fbbb (patch) | |
| tree | a8f8c1d9ba71feb8fe0f27a0847e0c0e033e0781 | |
| parent | 3c5de4052408f5b4cc272a05db2237980a97c918 (diff) | |
🎈 perf(session_get_direction): cache session direction after first call
| -rw-r--r-- | src/adapter/adapter.c | 7 | ||||
| -rw-r--r-- | src/adapter/session_manager.c | 1 | ||||
| -rw-r--r-- | src/adapter/session_manager.h | 1 |
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; |
