Skip to content

Commit f473a96

Browse files
committed
free memory for action / request and headers
1 parent bd9a223 commit f473a96

File tree

3 files changed

+39
-7
lines changed

3 files changed

+39
-7
lines changed

src/mod_redirectionio.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ static int redirectionio_match_handler(request_rec *r) {
129129

130130
ctx->action = NULL;
131131
ctx->body_filter = NULL;
132-
ctx->is_redirected = 0;
133132

134133
ap_set_module_config(r->request_config, &redirectionio_module, ctx);
135134
redirectionio_connection* conn = redirectionio_acquire_connection(config, r->pool);
@@ -186,7 +185,7 @@ static int redirectionio_redirect_handler_for_status_code(request_rec *r, uint16
186185
}
187186

188187
// No match here
189-
if (ctx->action == NULL || ctx->is_redirected == 1) {
188+
if (ctx->action == NULL) {
190189
return DECLINED;
191190
}
192191

@@ -197,7 +196,6 @@ static int redirectionio_redirect_handler_for_status_code(request_rec *r, uint16
197196
}
198197

199198
r->status = new_status_code;
200-
ctx->is_redirected = 1;
201199

202200
return r->status;
203201
}

src/mod_redirectionio.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ typedef struct {
5252
typedef struct {
5353
struct REDIRECTIONIO_Action *action;
5454
struct REDIRECTIONIO_FilterBodyAction *body_filter;
55-
int is_redirected;
5655
} redirectionio_context;
5756

5857
#endif

src/redirectionio_protocol.c

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ static apr_status_t redirectionio_read_string(redirectionio_connection *conn, ch
2323

2424
static apr_status_t redirectionio_send_protocol_header(redirectionio_connection *conn, const char *project_key, apr_uint16_t command, request_rec *r);
2525

26+
static apr_status_t redirectionio_action_cleanup(void *action);
27+
28+
static apr_status_t redirectionio_request_cleanup(void *request);
29+
30+
static apr_status_t redirectionio_request_serialized_cleanup(void *request_serialized);
31+
2632
apr_status_t redirectionio_protocol_match(redirectionio_connection *conn, redirectionio_context *ctx, request_rec *r, const char *project_key) {
2733
apr_uint32_t alen;
2834
apr_status_t rv;
@@ -56,13 +62,17 @@ apr_status_t redirectionio_protocol_match(redirectionio_connection *conn, redire
5662
return APR_EGENERAL;
5763
}
5864

65+
apr_pool_pre_cleanup_register(r->pool, redirectionio_request, redirectionio_request_cleanup);
66+
5967
// Serialize request
6068
request_serialized = redirectionio_request_json_serialize(redirectionio_request);
6169

6270
if (request_serialized == NULL) {
6371
return APR_EGENERAL;
6472
}
6573

74+
apr_pool_pre_cleanup_register(r->pool, request_serialized, redirectionio_request_serialized_cleanup);
75+
6676
// Send protocol header
6777
rv = redirectionio_send_protocol_header(conn, project_key, REDIRECTIONIO_PROTOCOL_COMMAND_MATCH_ACTION, r);
6878

@@ -115,6 +125,10 @@ apr_status_t redirectionio_protocol_match(redirectionio_connection *conn, redire
115125

116126
// Unserialize action
117127
ctx->action = (struct REDIRECTIONIO_Action *)redirectionio_action_json_deserialize(action_serialized);
128+
129+
if (ctx->action != NULL) {
130+
apr_pool_pre_cleanup_register(r->pool, ctx->action, redirectionio_action_cleanup);
131+
}
118132
}
119133

120134
return APR_SUCCESS;
@@ -248,12 +262,16 @@ apr_status_t redirectionio_protocol_send_filter_headers(redirectionio_context *c
248262
value_str = apr_pstrdup(r->pool, first_header->value);
249263

250264
apr_table_setn(r->headers_out, name_str, value_str);
265+
266+
free((void *)first_header->name);
267+
free((void *)first_header->value);
251268
}
252269

253-
first_header = first_header->next;
254-
}
270+
current_header = first_header->next;
271+
free(first_header);
255272

256-
// @TODO DROP Header map
273+
first_header = current_header;
274+
}
257275

258276
return APR_SUCCESS;
259277
}
@@ -424,3 +442,20 @@ static apr_status_t redirectionio_send_protocol_header(redirectionio_connection
424442
return APR_SUCCESS;
425443
}
426444

445+
static apr_status_t redirectionio_action_cleanup(void *action) {
446+
redirectionio_action_drop(action);
447+
448+
return APR_SUCCESS;
449+
}
450+
451+
static apr_status_t redirectionio_request_cleanup(void *request) {
452+
redirectionio_request_drop(request);
453+
454+
return APR_SUCCESS;
455+
}
456+
457+
static apr_status_t redirectionio_request_serialized_cleanup(void *request_serialized) {
458+
free(request_serialized);
459+
460+
return APR_SUCCESS;
461+
}

0 commit comments

Comments
 (0)