@@ -23,6 +23,12 @@ static apr_status_t redirectionio_read_string(redirectionio_connection *conn, ch
2323
2424static 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+
2632apr_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