and ap_new_connection() were changed last week)
I have skipped putting the change into WinNT MPM and mod_proxy. I
left a note in the mod_proxy code; for the NT MPM I think I can talk
somebody into doing the right thing for me.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@87982
13f79535-47bb-0310-9956-
ffa450edef68
Changes with Apache 2.0b1
+ *) ap_new_connection() closes the socket and returns NULL if a socket
+ call fails. Usually this is due to a connection which has been
+ reset. [Jeff Trawick]
+
*) Move the Apache version information out of httpd.h and into release.h.
This is in preparation for the first tag with the new tag and release
system. [Ryan Bloom]
* @param server The server to create the connection for
* @param inout The socket to use for all communication with the client
* @param id ID of this connection; unique at any point in time.
+ * @return new conn_rec, or NULL if the connection has already been reset
*/
conn_rec *ap_new_connection(apr_pool_t *p, server_rec *server,
apr_socket_t *inout, long id);
}
origin = ap_new_connection(r->pool, r->server, sock, 0);
+ if (!origin) {
+ /* the peer reset the connection already; ap_new_connection()
+ * closed the socket */
+ /* XXX somebody that knows what they're doing add an error path */
+ }
+
ap_add_output_filter("CORE", NULL, NULL, origin);
clear_connection(r->pool, r->headers_in); /* Strip connection-based headers */
}
current_conn = ap_new_connection(p, ap_server_conf, sock, conn_id);
-
- ap_process_connection(current_conn);
- ap_lingering_close(current_conn);
+ if (current_conn) {
+ ap_process_connection(current_conn);
+ ap_lingering_close(current_conn);
+ }
}
static int32 worker_thread(void * dummy)
SERVER_BUSY_READ, (request_rec *) NULL);
current_conn = ap_new_connection(p, ap_server_conf, sock, conn_id);
-
- ap_process_connection(current_conn);
- ap_lingering_close(current_conn);
+ if (current_conn) {
+ ap_process_connection(current_conn);
+ ap_lingering_close(current_conn);
+ }
}
static void *worker_thread(void *);
}
current_conn = ap_new_connection(p, ap_server_conf, sock, conn_id);
-
- ap_process_connection(current_conn);
- ap_lingering_close(current_conn);
+ if (current_conn) {
+ ap_process_connection(current_conn);
+ ap_lingering_close(current_conn);
+ }
}
static void *worker_thread(void *);
int csd;
current_conn = ap_new_connection(p, ap_server_conf, sock, conn_id);
-
- ap_process_connection(current_conn);
- ap_lingering_close(current_conn);
+ if (current_conn) {
+ ap_process_connection(current_conn);
+ ap_lingering_close(current_conn);
+ }
}
static int32 worker_thread(void * dummy)
SERVER_BUSY_READ, (request_rec *) NULL);
current_conn = ap_new_connection(p, ap_server_conf, sock, conn_id);
-
- ap_process_connection(current_conn);
- ap_lingering_close(current_conn);
+ if (current_conn) {
+ ap_process_connection(current_conn);
+ ap_lingering_close(current_conn);
+ }
}
/* Sets workers_may_exit if we received a character on the pipe_of_death */
static void check_pipe_of_death(void)
}
current_conn = ap_new_connection(p, ap_server_conf, sock, conn_id);
-
- ap_process_connection(current_conn);
- ap_lingering_close(current_conn);
+ if (current_conn) {
+ ap_process_connection(current_conn);
+ ap_lingering_close(current_conn);
+ }
}
static void *worker_thread(void *);
current_conn = ap_new_connection(ptrans, ap_server_conf, csd,
THREAD_GLOBAL(child_num));
-
- ap_process_connection(current_conn);
- ap_lingering_close(current_conn);
+ if (current_conn) {
+ ap_process_connection(current_conn);
+ ap_lingering_close(current_conn);
+ }
}
clean_child_exit(0);