Skip to content

Commit 512e0a3

Browse files
committed
Stabilize module apache, correctly clean broken connection
1 parent d3c3c4f commit 512e0a3

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

src/mod_redirectionio.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ static int redirectionio_log_handler(request_rec *r);
1919
static apr_status_t redirectionio_create_connection(redirectionio_connection *conn, redirectionio_config *config, apr_pool_t *pool);
2020
static redirectionio_connection* redirectionio_acquire_connection(redirectionio_config *config, apr_pool_t *pool);
2121
static apr_status_t redirectionio_release_connection(redirectionio_connection *conn, redirectionio_config *config, apr_pool_t *pool);
22+
static apr_status_t redirectionio_invalidate_connection(redirectionio_connection *conn, redirectionio_config *config, apr_pool_t *pool);
2223

2324
static void *create_redirectionio_dir_conf(apr_pool_t *pool, char *context);
2425
static void *merge_redirectionio_dir_conf(apr_pool_t *pool, void *BASE, void *ADD);
@@ -80,7 +81,7 @@ static int redirectionio_redirect_handler(request_rec *r) {
8081

8182
// Ask for redirection
8283
if (redirectionio_protocol_match(conn, context, r, config->project_key) != APR_SUCCESS) {
83-
redirectionio_release_connection(conn, config, r->pool);
84+
redirectionio_invalidate_connection(conn, config, r->pool);
8485

8586
return DECLINED;
8687
}
@@ -127,7 +128,7 @@ static int redirectionio_log_handler(request_rec *r) {
127128
}
128129

129130
if (redirectionio_protocol_log(conn, context, r, config->project_key) != APR_SUCCESS) {
130-
redirectionio_release_connection(conn, config, r->pool);
131+
redirectionio_invalidate_connection(conn, config, r->pool);
131132

132133
return DECLINED;
133134
}
@@ -145,7 +146,6 @@ static apr_status_t redirectionio_create_connection(redirectionio_connection *co
145146
family = APR_UNIX;
146147
}
147148

148-
ap_log_perror(APLOG_MARK, APLOG_NOTICE, 0, pool, "mod_redirectionio: Connecting to server: %s", config->server);
149149
rv = apr_sockaddr_info_get(&conn->rio_addr, config->server, family, config->port, 0, pool);
150150

151151
if (rv != APR_SUCCESS) {
@@ -223,6 +223,16 @@ static apr_status_t redirectionio_release_connection(redirectionio_connection *c
223223
return rv;
224224
}
225225

226+
static apr_status_t redirectionio_invalidate_connection(redirectionio_connection *conn, redirectionio_config *config, apr_pool_t *pool) {
227+
apr_status_t rv = apr_reslist_invalidate(config->connection_pool, conn);
228+
229+
if (rv != APR_SUCCESS) {
230+
ap_log_perror(APLOG_MARK, APLOG_ERR, 0, pool, "mod_redirectionio: Can not invalidate RIO socket.");
231+
}
232+
233+
return rv;
234+
}
235+
226236
static void *create_redirectionio_dir_conf(apr_pool_t *pool, char *context) {
227237
redirectionio_config *config = apr_pcalloc(pool, sizeof(redirectionio_config));
228238

@@ -336,7 +346,6 @@ static apr_status_t redirectionio_pool_destruct(void* resource, void* params, ap
336346
static apr_status_t redirectionio_child_exit(void *resource) {
337347
apr_reslist_t *connection_pool = (apr_reslist_t *)resource;
338348
apr_pool_t *pool;
339-
340349
apr_pool_create(&pool, NULL);
341350

342351
while (apr_reslist_acquired_count(connection_pool) != 0) {

src/redirectionio_protocol.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ apr_status_t redirectionio_protocol_log(redirectionio_connection *conn, redirect
7575
const char *location = apr_table_get(r->headers_out, "Location");
7676
const char *user_agent = apr_table_get(r->headers_in, "User-Agent");
7777
const char *referer = apr_table_get(r->headers_in, "Referer");
78+
const char *matched_rule_id = ctx->matched_rule_id;
7879
apr_status_t rv;
7980
char *dst;
8081

@@ -90,12 +91,16 @@ apr_status_t redirectionio_protocol_log(redirectionio_connection *conn, redirect
9091
referer = "";
9192
}
9293

94+
if (matched_rule_id == NULL) {
95+
matched_rule_id = "";
96+
}
97+
9398
wlen =
9499
sizeof(COMMAND_LOG_QUERY)
95100
+ strlen(project_key)
96101
+ strlen(r->unparsed_uri)
97102
+ strlen(r->hostname)
98-
+ strlen(ctx->matched_rule_id)
103+
+ strlen(matched_rule_id)
99104
+ strlen(location)
100105
+ 3 // Status code length
101106
+ strlen(user_agent)
@@ -111,7 +116,7 @@ apr_status_t redirectionio_protocol_log(redirectionio_connection *conn, redirect
111116
project_key,
112117
r->unparsed_uri,
113118
r->hostname,
114-
ctx->matched_rule_id,
119+
matched_rule_id,
115120
location,
116121
r->status,
117122
user_agent,

0 commit comments

Comments
 (0)