[mapserver-commits] r11067 - trunk/mapserver
svn at osgeo.org
svn at osgeo.org
Fri Mar 4 06:27:19 EST 2011
Author: tamas
Date: 2011-03-04 03:27:19 -0800 (Fri, 04 Mar 2011)
New Revision: 11067
Modified:
trunk/mapserver/mapmssql2008.c
Log:
Improve memory management in mssql2008, fix memory leak on query handling
Modified: trunk/mapserver/mapmssql2008.c
===================================================================
--- trunk/mapserver/mapmssql2008.c 2011-03-04 11:07:36 UTC (rev 11066)
+++ trunk/mapserver/mapmssql2008.c 2011-03-04 11:27:19 UTC (rev 11067)
@@ -181,8 +181,8 @@
match = loc - hay_lower;
}
- free(hay_lower);
- free(needle_lower);
+ msFree(hay_lower);
+ msFree(needle_lower);
return (char *) (match < 0 ? NULL : haystack + match);
}
@@ -213,7 +213,7 @@
SQLFreeHandle(SQL_HANDLE_ENV, conn->henv);
}
- free(conn);
+ msFree(conn);
}
/* Set the error string for the connection */
@@ -231,8 +231,7 @@
{
SQLCHAR fullConnString[1024];
SQLRETURN rc;
- msODBCconn * conn = malloc(sizeof(msODBCconn));
- MS_CHECK_ALLOC(conn, sizeof(msODBCconn), NULL);
+ msODBCconn * conn = msSmallMalloc(sizeof(msODBCconn));
memset(conn, 0, sizeof(*conn));
@@ -359,8 +358,7 @@
/* have to setup a connection to the database */
- layerinfo = (msMSSQL2008LayerInfo*) malloc(sizeof(msMSSQL2008LayerInfo));
- MS_CHECK_ALLOC(layerinfo, sizeof(msMSSQL2008LayerInfo), MS_FAILURE);
+ layerinfo = (msMSSQL2008LayerInfo*) msSmallMalloc(sizeof(msMSSQL2008LayerInfo));
layerinfo->sql = NULL; /* calc later */
layerinfo->row_num = 0;
@@ -388,7 +386,7 @@
layerinfo->conn = mssql2008Connect(conn_decrypted);
- free(conn_decrypted);
+ msFree(conn_decrypted);
conn_decrypted = NULL;
if(!layerinfo->conn || layerinfo->conn->errorMessage[0])
@@ -424,9 +422,9 @@
"(4) TCPIP not enabled for SQL Client or server <br>\n\n",
"msMSSQL2008LayerOpen()", maskeddata, errMess);
- free(maskeddata);
+ msFree(maskeddata);
msMSSQL2008CloseConnection(layerinfo->conn);
- free(layerinfo);
+ msFree(layerinfo);
return MS_FAILURE;
}
@@ -459,7 +457,7 @@
}
if(layer->iteminfo) {
- free(layer->iteminfo);
+ msFree(layer->iteminfo);
}
layer->iteminfo = NULL;
@@ -480,12 +478,9 @@
return MS_SUCCESS;
}
- if(layer->iteminfo) {
- free(layer->iteminfo);
- }
+ msFree(layer->iteminfo);
- layer->iteminfo = (int *) malloc(sizeof(int) * layer->numitems);
- MS_CHECK_ALLOC(layer->iteminfo, sizeof(int) * layer->numitems, MS_FAILURE);
+ layer->iteminfo = (int *) msSmallMalloc(sizeof(int) * layer->numitems);
itemindexes = (int*)layer->iteminfo;
@@ -626,8 +621,7 @@
strcat(result, end);
geom_table= result;
- if (oldresult != NULL)
- free(oldresult);
+ msFree(oldresult);
}
/* if we're here, this will be a malloc'd string, so no need to copy it */
@@ -642,7 +636,7 @@
int need_len = strlen(data_source) + strlen(with_template) + strlen(layerinfo->index_name);
char *tmp = (char*) msSmallMalloc( need_len + 1 );
sprintf( tmp, with_template, data_source, layerinfo->index_name );
- free(data_source);
+ msFree(data_source);
data_source = tmp;
}
@@ -657,9 +651,9 @@
columns_wanted, data_source, layer->filter.string, layerinfo->geom_column, box3d );
}
- free(data_source);
- free(f_table_name);
- free(columns_wanted);
+ msFree(data_source);
+ msFree(f_table_name);
+ msFree(columns_wanted);
if(layer->debug) {
msDebug("query_string_temp:%s\n", query_string_temp);
@@ -708,7 +702,7 @@
set_up_result = prepare_database(layer, rect, &query_str);
if(set_up_result != MS_SUCCESS) {
- free(query_str);
+ msFree(query_str);
return set_up_result; /* relay error */
}
@@ -748,42 +742,42 @@
layerinfo->conn = NULL;
if(layerinfo->user_srid) {
- free(layerinfo->user_srid);
+ msFree(layerinfo->user_srid);
layerinfo->user_srid = NULL;
}
if(layerinfo->urid_name) {
- free(layerinfo->urid_name);
+ msFree(layerinfo->urid_name);
layerinfo->urid_name = NULL;
}
if(layerinfo->index_name) {
- free(layerinfo->index_name);
+ msFree(layerinfo->index_name);
layerinfo->index_name = NULL;
}
if(layerinfo->sql) {
- free(layerinfo->sql);
+ msFree(layerinfo->sql);
layerinfo->sql = NULL;
}
if(layerinfo->geom_column) {
- free(layerinfo->geom_column);
+ msFree(layerinfo->geom_column);
layerinfo->geom_column = NULL;
}
if(layerinfo->geom_column_type) {
- free(layerinfo->geom_column_type);
+ msFree(layerinfo->geom_column_type);
layerinfo->geom_column_type = NULL;
}
if(layerinfo->geom_table) {
- free(layerinfo->geom_table);
+ msFree(layerinfo->geom_table);
layerinfo->geom_table = NULL;
}
setMSSQL2008LayerInfo(layer, NULL);
- free(layerinfo);
+ msFree(layerinfo);
}
return MS_SUCCESS;
@@ -833,7 +827,7 @@
memcpy(&line.point[0].y, &wkb[offset + 5 + 8], 8);
offset += 5 + 16;
msAddLine(shape, &line);
- free(line.point);
+ msFree(line.point);
} else if(type == 2) {
/* Linestring */
shape->type = MS_SHAPE_POINT;
@@ -846,7 +840,7 @@
}
offset += 9 + 16 * line.numpoints; /* length of object */
msAddLine(shape, &line);
- free(line.point);
+ msFree(line.point);
} else if(type == 3) {
/* Polygon */
shape->type = MS_SHAPE_POINT;
@@ -868,7 +862,7 @@
}
/* make offset point to next linear ring */
msAddLine(shape, &line);
- free(line.point);
+ msFree(line.point);
offset += 4 + 16 *npoints;
}
}
@@ -913,7 +907,7 @@
}
offset += 9 + 16 * line.numpoints; /* length of object */
msAddLine(shape, &line);
- free(line.point);
+ msFree(line.point);
} else if(type == 3) {
/* polygon */
shape->type = MS_SHAPE_LINE;
@@ -934,7 +928,7 @@
}
/* make offset point to next linear ring */
msAddLine(shape, &line);
- free(line.point);
+ msFree(line.point);
offset += 4 + 16 * npoints;
}
}
@@ -981,7 +975,7 @@
}
/* make offset point to next linear ring */
msAddLine(shape, &line);
- free(line.point);
+ msFree(line.point);
offset += 4 + 16 * npoints;
}
}
@@ -1070,7 +1064,7 @@
msAddLine(shape, &line);
}
- free(line.point);
+ msFree(line.point);
}
else if(type == 2)
{
@@ -1090,7 +1084,7 @@
msAddLine(shape, &line);
}
- free(line.point);
+ msFree(line.point);
}
else if(type == 3)
{
@@ -1113,7 +1107,7 @@
}
/* make offset point to next linear ring */
msAddLine(shape, &line);
- free(line.point);
+ msFree(line.point);
offset += 4 + 16 *npoints;
}
}
@@ -1404,7 +1398,7 @@
}
//free(wkbBuffer);
- free(wkbTemp);
+ msFree(wkbTemp);
}
/* Next get unique id for row - since the OID shouldn't be larger than a long we'll assume billions as a limit */
@@ -1510,18 +1504,19 @@
msDebug("msMSSQL2008LayerGetShape: %s \n", query_str);
}
- free(columns_wanted);
+ msFree(columns_wanted);
if (!executeSQL(layerinfo->conn, query_str))
{
msSetError(MS_QUERYERR, "Error executing MSSQL2008 SQL statement: %s\n-%s\n", "msMSSQL2008LayerGetShape()",
query_str, layerinfo->conn->errorMessage);
- free(query_str);
+ msFree(query_str);
return MS_FAILURE;
}
+ msFree(layerinfo->sql);
layerinfo->sql = query_str;
layerinfo->row_num = 0;
@@ -1565,7 +1560,7 @@
if (!executeSQL(layerinfo->conn, sql))
{
- free(geom_column_name);
+ msFree(geom_column_name);
return MS_FAILURE;
}
@@ -1676,7 +1671,7 @@
strcpy(tmp2, tmp1);
strcat(tmp2, sql);
msSetError(MS_QUERYERR, tmp2, "msMSSQL2008LayerRetrievePK()");
- free(tmp2);
+ msFree(tmp2);
return(MS_FAILURE);
}
More information about the mapserver-commits
mailing list