diff options
| author | yangwei <[email protected]> | 2024-04-07 15:55:03 +0800 |
|---|---|---|
| committer | yangwei <[email protected]> | 2024-04-07 15:55:03 +0800 |
| commit | 78bf3161e8e17ec45f70e402cd04dd4936156776 (patch) | |
| tree | 48dd5bf23273d3d8701945a40ba1681a7e737e94 | |
| parent | 244dd655680aa1dbba160e009f191e7dff655abc (diff) | |
🎈 perf(stream_entry pme): do not calloc ctx
| -rw-r--r-- | src/adapter/adapter.c | 4 | ||||
| -rw-r--r-- | src/stellar_on_sapp/stellar_on_sapp.c | 35 |
2 files changed, 13 insertions, 26 deletions
diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index 6a400b6..a612002 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -15,6 +15,7 @@ inline void adapter_session_poll(struct session *sess) { session_defer_loop(sess); + //TODO: detach packet from session } #include <dlfcn.h> @@ -193,6 +194,7 @@ void adapter_on_packet_update(struct stellar *st, struct streaminfo *pstream, vo { if(st->registered_packet_plugin_array == NULL || pkt_hdr == NULL)return; + // TODO: thread local packet struct packet pkt; pkt.type=type; pkt.a_stream=pstream; @@ -302,6 +304,7 @@ struct session *adapter_session_new(struct stellar *st, struct streaminfo *strea struct session *sess = session_new(st, type, stream->threadnum); if(sess) { + // TODO: thread local packet struct packet *pkt = CALLOC(struct packet, 1); session_set_current_packet(sess, pkt,adapter_packet_free, NULL); pkt->a_stream = stream; @@ -319,6 +322,7 @@ unsigned char adapter_session_state_update(struct streaminfo *stream, struct ses struct packet *pkt = NULL; if(likely(sess!=NULL)) { + // TODO: attach thread local packet to session pkt=(struct packet *)session_get0_current_packet(sess); session_dispatch( sess, state, pkt); return APP_STATE_GIVEME; diff --git a/src/stellar_on_sapp/stellar_on_sapp.c b/src/stellar_on_sapp/stellar_on_sapp.c index 1bcc31a..84bede4 100644 --- a/src/stellar_on_sapp/stellar_on_sapp.c +++ b/src/stellar_on_sapp/stellar_on_sapp.c @@ -93,8 +93,7 @@ void STELLAR_DEFER_LOADER_EXIT(void) static unsigned char loader_transfer_stream_entry(struct streaminfo *pstream, UCHAR state, void **pme, int thread_seq,void *a_packet) { - struct simple_stream_ctx *ctx=(struct simple_stream_ctx *)*pme; - struct tcpdetail *pdetail=(struct tcpdetail *)pstream->pdetail; + struct session *sess=(struct session *)*pme; int is_ctrl_pkt=0; const void *raw_pkt=NULL; unsigned char entry_ret=APP_STATE_GIVEME; @@ -103,49 +102,33 @@ static unsigned char loader_transfer_stream_entry(struct streaminfo *pstream, UC return APP_STATE_DROPME; } - if(*pme==NULL) - { - *pme=CALLOC(struct simple_stream_ctx,1); - ctx=(struct simple_stream_ctx *)*pme; - } - - if(a_packet!=NULL) - { - if(DIR_C2S == pstream->curdir){ - ctx->c2s_bytes += pdetail->datalen; - ctx->c2s_pkts++; - }else{ - ctx->s2c_bytes += pdetail->datalen; - ctx->s2c_pkts++; - } - } switch (state) { case OP_STATE_PENDING: - ctx->sess=adapter_session_new(g_stellar, pstream); - session_set_ex_data(ctx->sess, g_streaminfo_exdata_id, pstream); - stream_bridge_async_data_put(pstream, g_session_bridge_id, ctx->sess); - entry_ret=adapter_session_state_update(pstream, ctx->sess, a_packet, SESSION_STATE_OPENING); + sess=adapter_session_new(g_stellar, pstream); + session_set_ex_data(sess, g_streaminfo_exdata_id, pstream); + stream_bridge_async_data_put(pstream, g_session_bridge_id, sess); + entry_ret=adapter_session_state_update(pstream, sess, a_packet, SESSION_STATE_OPENING); + *pme=sess; break; case OP_STATE_DATA: raw_pkt = get_current_rawpkt_from_streaminfo(pstream); get_opt_from_rawpkt(raw_pkt, RAW_PKT_GET_IS_CTRL_PKT, (void *)&is_ctrl_pkt); if(is_ctrl_pkt==1) { - entry_ret=adapter_session_state_update(pstream, ctx->sess, a_packet, SESSION_STATE_CONTROL); + entry_ret=adapter_session_state_update(pstream, sess, a_packet, SESSION_STATE_CONTROL); entry_ret = entry_ret|APP_STATE_DROPPKT; } else { - entry_ret=adapter_session_state_update(pstream, ctx->sess, a_packet, SESSION_STATE_ACTIVE); + entry_ret=adapter_session_state_update(pstream, sess, a_packet, SESSION_STATE_ACTIVE); } break; case OP_STATE_CLOSE: if(a_packet) { - entry_ret=adapter_session_state_update(pstream, ctx->sess, a_packet, SESSION_STATE_ACTIVE); + entry_ret=adapter_session_state_update(pstream, sess, a_packet, SESSION_STATE_ACTIVE); } - FREE(*pme); break; default: break; |
