I had a look at the code in HTTPServerConnection .cpp (version 1.3.6p2), line 86, and the code is making a call to createRequestHandler on the HTTPRequestHandlerFactory object. This returns a new request handler on the heap each time and assigns it to an auto_ptr for eventual cleanup .
- Code: Select all
std::auto_ptr<HTTPRequestHandler> pHandler(_pFactory->createRequestHandler(request))
I have hacked the code a bit so that the handler returned is not deleted, and in my HTTPRequestHandlerFactory implementation, I return the address of the same HTTPRequestHandler each time (which is allocated on the stack). This I did because I thought that allocating a new request handler for each call might be expensive for heavy loads. I tested my code and it works ok. Obviously, the code in the request handler has to be thread and reentrant safe.
Humbly, could I ask as to why this was implemented this way? Why is a new request handler created on the heap for each call? Would the approach I mentioned above make for better performance?
Or maybe, the HTTPServerConnection class could have some kind of option specified - say in the constructor - to denote if request handlers returned by the createRequestHandler call on the factory to be deleted or not? Because in that way, one could implement either approach.
Comments would be appreciated.
Thanks.





