dovecot-2.2: lib-http server: Require handle_request() to either...
dovecot at dovecot.org
dovecot at dovecot.org
Tue Aug 5 15:45:37 UTC 2014
details: http://hg.dovecot.org/dovecot-2.2/rev/6785b41831d3
changeset: 17681:6785b41831d3
user: Timo Sirainen <tss at iki.fi>
date: Tue Aug 05 17:43:31 2014 +0200
description:
lib-http server: Require handle_request() to either send a response or reference the request.
This should make it more difficult to accidentally forget to send a
response and cause a hang.
Currently this assert-crashes, although it would have been possible to make
it return some internal error instead also.
diffstat:
src/lib-http/http-server-connection.c | 5 +++++
src/lib-http/http-server.h | 4 ++++
2 files changed, 9 insertions(+), 0 deletions(-)
diffs (30 lines):
diff -r beaee1a2ad61 -r 6785b41831d3 src/lib-http/http-server-connection.c
--- a/src/lib-http/http-server-connection.c Tue Aug 05 17:37:25 2014 +0200
+++ b/src/lib-http/http-server-connection.c Tue Aug 05 17:43:31 2014 +0200
@@ -259,7 +259,12 @@
http_server_request_fail(req, 505, "Not Implemented");
return;
} else {
+ unsigned int old_refcount = req->refcount;
+
conn->callbacks->handle_request(conn->context, req);
+ i_assert((req->response != NULL &&
+ req->response->submitted) ||
+ req->refcount > old_refcount);
}
}
}
diff -r beaee1a2ad61 -r 6785b41831d3 src/lib-http/http-server.h
--- a/src/lib-http/http-server.h Tue Aug 05 17:37:25 2014 +0200
+++ b/src/lib-http/http-server.h Tue Aug 05 17:43:31 2014 +0200
@@ -38,6 +38,10 @@
};
struct http_server_callbacks {
+ /* Reference the server request. Before returning you must either send
+ a response to the request or reference the request with
+ http_server_request_ref() and unreference it later after sending
+ the response. */
void (*handle_request)(void *context, struct http_server_request *req);
void (*handle_connect_request)(void *context,
struct http_server_request *req, struct http_url *target);
More information about the dovecot-cvs
mailing list