Changeset: 7e0a61ba915a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7e0a61ba915a
Modified Files:
monetdb5/modules/mal/mal_mapi.c
Branch: Jul2021
Log Message:
Fixing mal mapi leaks
diffs (103 lines):
diff --git a/monetdb5/modules/mal/mal_mapi.c b/monetdb5/modules/mal/mal_mapi.c
--- a/monetdb5/modules/mal/mal_mapi.c
+++ b/monetdb5/modules/mal/mal_mapi.c
@@ -1052,6 +1052,9 @@ SERVERdisconnectALL(int *key){
GDKfree(SERVERsessions[i].dbalias);
SERVERsessions[i].dbalias = NULL;
*key = SERVERsessions[i].key;
+ if( SERVERsessions[i].hdl)
+ mapi_close_handle(SERVERsessions[i].hdl);
+ SERVERsessions[i].hdl= NULL;
mapi_disconnect(SERVERsessions[i].mid);
}
@@ -1074,6 +1077,9 @@ SERVERdisconnectWithAlias(int *key, str
GDKfree(SERVERsessions[i].dbalias);
SERVERsessions[i].dbalias = NULL;
*key = SERVERsessions[i].key;
+ if( SERVERsessions[i].hdl)
+
mapi_close_handle(SERVERsessions[i].hdl);
+ SERVERsessions[i].hdl= NULL;
mapi_disconnect(SERVERsessions[i].mid);
break;
}
@@ -1205,6 +1211,9 @@ SERVERdisconnect(void *ret, int *key){
Mapi mid;
(void) ret;
accessTest(*key, "disconnect");
+ if( SERVERsessions[i].hdl)
+ mapi_close_handle(SERVERsessions[i].hdl);
+ SERVERsessions[i].hdl= NULL;
mapi_disconnect(mid);
if( SERVERsessions[i].dbalias)
GDKfree(SERVERsessions[i].dbalias);
@@ -1219,6 +1228,10 @@ SERVERdestroy(void *ret, int *key){
Mapi mid;
(void) ret;
accessTest(*key, "destroy");
+ if( SERVERsessions[i].hdl)
+ mapi_close_handle(SERVERsessions[i].hdl);
+ SERVERsessions[i].hdl= NULL;
+ mapi_disconnect(mid);
mapi_destroy(mid);
SERVERsessions[i].c= 0;
if( SERVERsessions[i].dbalias)
@@ -1233,6 +1246,9 @@ SERVERreconnect(void *ret, int *key){
Mapi mid;
(void) ret;
accessTest(*key, "destroy");
+ if( SERVERsessions[i].hdl)
+ mapi_close_handle(SERVERsessions[i].hdl);
+ SERVERsessions[i].hdl= NULL;
mapi_reconnect(mid);
return MAL_SUCCEED;
}
@@ -1719,10 +1735,13 @@ SERVERmapi_rpc_single_row(Client cntxt,
case TYPE_flt:
case TYPE_dbl:
case TYPE_str:
-
if(SERVERfieldAnalysis(fld,getVarType(mb,getArg(pci,j)),&stk->stk[pci->argv[j]])
< 0)
+
if(SERVERfieldAnalysis(fld,getVarType(mb,getArg(pci,j)),&stk->stk[pci->argv[j]])
< 0) {
+ mapi_close_handle(hdl);
throw(MAL, "mapi.rpc", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ }
break;
default:
+ mapi_close_handle(hdl);
throw(MAL, "mapi.rpc",
"Missing type implementation ");
/* all the other basic types come here */
@@ -1730,6 +1749,7 @@ SERVERmapi_rpc_single_row(Client cntxt,
}
i++;
}
+ mapi_close_handle(hdl);
if( i>1)
throw(MAL, "mapi.rpc","Too many answers");
return MAL_SUCCEED;
@@ -1762,19 +1782,24 @@ SERVERmapi_rpc_bat(Client cntxt, MalBlkP
catchErrors("mapi.rpc");
b= COLnew(0,tt,256, TRANSIENT);
- if ( b == NULL)
+ if ( b == NULL) {
+ mapi_close_handle(hdl);
throw(MAL,"mapi.rpc", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ }
while( mapi_fetch_row(hdl)){
fld2= mapi_fetch_field(hdl,1);
if(SERVERfieldAnalysis(fld2, tt, &tval) < 0) {
BBPreclaim(b);
+ mapi_close_handle(hdl);
throw(MAL, "mapi.rpc", SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
if (BUNappend(b,VALptr(&tval), false) != GDK_SUCCEED) {
BBPreclaim(b);
+ mapi_close_handle(hdl);
throw(MAL, "mapi.rpc", SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
}
+ mapi_close_handle(hdl);
*ret = b->batCacheid;
BBPkeepref(*ret);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list