webmcp
changeset 328:04b0687130d8
Bugfix regarding request_per_connection counting; Use new :close_after_finish() method of Moonbridge
author | jbe |
---|---|
date | Tue Mar 24 01:58:17 2015 +0100 (2015-03-24) |
parents | d8480a60a07d |
children | 3db9b672ee73 |
files | framework/bin/mcp.lua framework/env/request/handler.lua |
line diff
1.1 --- a/framework/bin/mcp.lua Tue Mar 24 01:08:32 2015 +0100 1.2 +++ b/framework/bin/mcp.lua Tue Mar 24 01:58:17 2015 +0100 1.3 @@ -303,14 +303,18 @@ 1.4 end 1.5 local request_count = 0 1.6 local function inner_handler(http_request) 1.7 + request_count = request_count + 1 1.8 + if request_count >= max_requests_per_fork then 1.9 + http_request:close_after_finish() 1.10 + end 1.11 request.initialize() 1.12 - return request.handler(http_request, request_count >= max_requests_per_fork) 1.13 + return request.handler(http_request) 1.14 end 1.15 local outer_handler = http.generate_handler(inner_handler, args.http_options) 1.16 args.prepare = postfork_init 1.17 args.connect = function(socket) 1.18 - request_count = request_count + 1 1.19 if socket.interval then 1.20 + request_count = request_count + 1 1.21 request.initialize() 1.22 interval_handlers[socket.interval]() 1.23 else
2.1 --- a/framework/env/request/handler.lua Tue Mar 24 01:08:32 2015 +0100 2.2 +++ b/framework/env/request/handler.lua Tue Mar 24 01:58:17 2015 +0100 2.3 @@ -2,7 +2,6 @@ 2.4 success = -- false if an error occurred, true otherwise 2.5 request.handler( 2.6 http_request, -- HTTP request object 2.7 - close -- boolean indicating whether the server should announce to close the connection 2.8 ) 2.9 2.10 Called by mcp.lua to process an HTTP request. Calls request.router(), and handles the request. Note: request initializers will have to be (automatically) executed before this function is invoked by mcp.lua. 2.11 @@ -20,7 +19,6 @@ 2.12 end 2.13 2.14 function request.handler(http_request, close) 2.15 - local close_sent = false 2.16 request._http_request = http_request 2.17 local path = http_request.path 2.18 if path then 2.19 @@ -44,19 +42,14 @@ 2.20 end 2.21 end 2.22 2.23 - if close then 2.24 - request.add_header("Connection", "close") 2.25 - close_sent = true 2.26 - end 2.27 - 2.28 local success, error_info = xpcall( 2.29 function() 2.30 2.31 if request._route.static then 2.32 local f, errmsg = io.open(WEBMCP_BASE_PATH .. "static/" .. request._route.static, "r") 2.33 if not f then 2.34 + request.set_status("404 Not Found") 2.35 if request.get_404_route() then 2.36 - request.set_status("404 Not Found") 2.37 request.forward(request.get_404_route()) 2.38 else 2.39 error('Could not open static file "' .. request._route.static .. '": ' .. errmsg) 2.40 @@ -208,9 +201,7 @@ 2.41 if not request._status then 2.42 request._status = "500 Internal Server Error" 2.43 end 2.44 - if not close_sent then 2.45 - request.add_header("Connection", "close") 2.46 - end 2.47 + http_request:close_after_finish() 2.48 slot.set_layout('system_error') 2.49 slot.select('system_error', function() 2.50 if getmetatable(errobj) == mondelefant.errorobject_metatable then