This patch plugs several memory leaks, all in the
osrf_json_gateway_method_handler function:
1. osrf_locale, allocated by either buffer_release() or strdup().
2. A series of buffers allocated by apacheGetFirstParamValue():
param_locale
service
method
format
input_format
a_l
tout
As I have noted before, this file doesn't compile on my system because
I haven't installed the Apache headers. So the patch may require
closer attention than usual.
Scott McKellar
http://home.swbelll.net/mck9/ct/
Developer's Certificate of Origin 1.1 By making a contribution to
this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license indicated
in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source license
and I have the right under that license to submit that work with
modifications, whether created in whole or in part by me, under the
same open source license (unless I am permitted to submit under a
different license), as indicated in the file; or
(c) The contribution was provided directly to me by some other person
who certified (a), (b) or (c) and I have not modified it; and
(d) In the case of each of (a), (b), or (c), I understand and agree
that this project and the contribution are public and that a record
of the contribution (including all personal information I submit
with it, including my sign-off) is maintained indefinitely and may
be redistributed consistent with this project or the open source
license indicated in the file.
*** ./trunk/src/gateway/osrf_json_gateway.c 2008-01-01 11:42:56.000000000 -0600
--- ./trunk-mod/src/gateway/osrf_json_gateway.c 2008-01-01 22:14:31.000000000 -0600
***************
*** 172,180 ****
mparams = apacheGetParamValues( params, "param" ); /* free me */
if(format == NULL)
! format = "json";
if(input_format == NULL)
! input_format = format;
/* set the user defined timeout value */
int timeout = 60;
--- 172,180 ----
mparams = apacheGetParamValues( params, "param" ); /* free me */
if(format == NULL)
! format = strdup( "json" );
if(input_format == NULL)
! input_format = strdup( format );
/* set the user defined timeout value */
int timeout = 60;
***************
*** 182,191 ****
if( tout ) {
timeout = atoi(tout);
osrfLogDebug(OSRF_LOG_MARK, "Client supplied timeout of %d", timeout);
}
! if (a_l)
api_level = atoi(a_l);
if (!strcasecmp(format, "xml")) {
isXML = 1;
--- 182,194 ----
if( tout ) {
timeout = atoi(tout);
osrfLogDebug(OSRF_LOG_MARK, "Client supplied timeout of %d", timeout);
+ free( tout );
}
! if (a_l) {
api_level = atoi(a_l);
+ free( a_l );
+ }
if (!strcasecmp(format, "xml")) {
isXML = 1;
***************
*** 194,199 ****
--- 197,203 ----
ap_set_content_type(r, "text/plain");
}
+ free( format );
int ret = OK;
/* ----------------------------------------------------------------- */
***************
*** 285,291 ****
if( req_id == -1 ) {
! osrfLogError(OSRF_LOG_MARK, "I am unable to communcate with opensrf..going away...");
/* we don't want to spawn an intense re-forking storm
* if there is no jabber server.. so give it some time before we die */
usleep( 100000 ); /* 100 milliseconds */
--- 289,295 ----
if( req_id == -1 ) {
! osrfLogError(OSRF_LOG_MARK, "I am unable to communicate with opensrf..going away...");
/* we don't want to spawn an intense re-forking storm
* if there is no jabber server.. so give it some time before we die */
usleep( 100000 ); /* 100 milliseconds */
***************
*** 417,422 ****
--- 421,430 ----
osrfLogInfo(OSRF_LOG_MARK, "Completed processing service=%s, method=%s", service, method);
string_array_destroy(params);
string_array_destroy(mparams);
+ free( osrf_locale );
+ free( input_format );
+ free( method );
+ free( service );
osrfLogDebug(OSRF_LOG_MARK, "Gateway served %d requests", ++numserved);
osrfLogClearXid();