Skip to content

Commit b1f3602

Browse files
iandrewtedsiper
authored andcommitted
http_server: initialize request in process_request for http/1.1
This patch addresses feedback from @leonardo-albertovich, reducing how many components are being recreated on each new request for a single session. Now it only recreates the request object, rather than creating a new stream for each request of a session. It replaces my original fix in 0ef074a Signed-off-by: Andrew Titmuss <[email protected]>
1 parent 8eaf4af commit b1f3602

File tree

2 files changed

+33
-17
lines changed

2 files changed

+33
-17
lines changed

src/flb_http_common.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,11 @@ void flb_http_stream_destroy(struct flb_http_stream *stream)
437437
cfl_list_del(&stream->_head);
438438
}
439439

440-
flb_free(stream);
440+
flb_http_request_destroy(&stream->request);
441+
flb_http_response_destroy(&stream->response);
442+
443+
if (stream->releasable) {
444+
flb_free(stream);
445+
}
441446
}
442447
}

src/http_server/flb_http_server_http1.c

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,14 @@ static int http1_session_process_request(struct flb_http1_server_session *sessio
138138
struct mk_http_header *header;
139139
int result;
140140

141+
result = flb_http_request_init(&session->stream.request);
142+
143+
if (result != 0) {
144+
return -1;
145+
}
146+
147+
session->stream.request.stream = &session->stream;
148+
141149
if (session->inner_request.uri_processed.data != NULL) {
142150
session->stream.request.path = \
143151
cfl_sds_create_len(session->inner_request.uri_processed.data,
@@ -432,6 +440,15 @@ int flb_http1_response_set_body(struct flb_http_response *response,
432440
int flb_http1_server_session_init(struct flb_http1_server_session *session,
433441
struct flb_http_server_session *parent)
434442
{
443+
void *user_data;
444+
int result;
445+
446+
if (parent != NULL && parent->parent != NULL) {
447+
user_data = parent->parent->user_data;
448+
} else {
449+
user_data = NULL;
450+
}
451+
435452
session->initialized = FLB_TRUE;
436453

437454
dummy_mk_http_session_init(&session->inner_session, &session->inner_server);
@@ -440,6 +457,13 @@ int flb_http1_server_session_init(struct flb_http1_server_session *session,
440457

441458
mk_http_parser_init(&session->inner_parser);
442459

460+
result = flb_http_stream_init(&session->stream, parent, 0, HTTP_STREAM_ROLE_SERVER,
461+
user_data);
462+
463+
if (result != 0) {
464+
return -1;
465+
}
466+
443467
session->parent = parent;
444468

445469
return 0;
@@ -454,6 +478,8 @@ void flb_http1_server_session_destroy(struct flb_http1_server_session *session)
454478
session->inner_session.channel = NULL;
455479
}
456480

481+
flb_http_stream_destroy(&session->stream);
482+
457483
session->initialized = FLB_FALSE;
458484
}
459485
}
@@ -462,22 +488,7 @@ int flb_http1_server_session_ingest(struct flb_http1_server_session *session,
462488
unsigned char *buffer,
463489
size_t length)
464490
{
465-
void *user_data;
466-
int result;
467-
468-
if (session->parent != NULL && session->parent->parent != NULL) {
469-
user_data = session->parent->parent->user_data;
470-
}
471-
else {
472-
user_data = NULL;
473-
}
474-
475-
result = flb_http_stream_init(&session->stream, session->parent, 0, HTTP_STREAM_ROLE_SERVER,
476-
user_data);
477-
478-
if (result != 0) {
479-
return HTTP_SERVER_PROVIDER_ERROR;
480-
}
491+
int result;
481492

482493
result = mk_http_parser(&session->inner_request,
483494
&session->inner_parser,

0 commit comments

Comments
 (0)