summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryangwei <[email protected]>2024-04-07 15:55:03 +0800
committeryangwei <[email protected]>2024-04-07 15:55:03 +0800
commit78bf3161e8e17ec45f70e402cd04dd4936156776 (patch)
tree48dd5bf23273d3d8701945a40ba1681a7e737e94
parent244dd655680aa1dbba160e009f191e7dff655abc (diff)
🎈 perf(stream_entry pme): do not calloc ctx
-rw-r--r--src/adapter/adapter.c4
-rw-r--r--src/stellar_on_sapp/stellar_on_sapp.c35
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;