Changeset: efabc66e102d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=efabc66e102d
Modified Files:
clients/mapiclient/mclient.c
Branch: default
Log Message:
Don't leak memory on sudden disconnect.
diffs (98 lines):
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -1944,7 +1944,7 @@ doRequest(Mapi mid, const char *buf)
return 0;
}
-#define CHECK_RESULT(mid, hdl, break_or_continue, buf) \
+#define CHECK_RESULT(mid, hdl, break_or_continue, buf, fp) \
switch (mapi_error(mid)) { \
case MOK: \
/* everything A OK */ \
@@ -1983,6 +1983,8 @@ doRequest(Mapi mid, const char *buf)
timerEnd(); \
if (buf) \
free(buf); \
+ if (fp) \
+ close_stream(fp); \
return 1; \
}
@@ -2029,12 +2031,12 @@ doFileBulk(Mapi mid, stream *fp)
timerResume();
if (hdl == NULL) {
hdl = mapi_query_prep(mid);
- CHECK_RESULT(mid, hdl, continue, buf);
+ CHECK_RESULT(mid, hdl, continue, buf, fp);
}
assert(hdl != NULL);
mapi_query_part(hdl, buf, (size_t) length);
- CHECK_RESULT(mid, hdl, continue, buf);
+ CHECK_RESULT(mid, hdl, continue, buf, fp);
/* if not at EOF, make sure there is a newline in the
* buffer */
@@ -2053,14 +2055,14 @@ doFileBulk(Mapi mid, stream *fp)
(length > 0 || mapi_query_done(hdl) == MMORE))
continue; /* get more data */
- CHECK_RESULT(mid, hdl, continue, buf);
+ CHECK_RESULT(mid, hdl, continue, buf, fp);
rc = format_result(mid, hdl, 0);
if (rc == MMORE && (length > 0 || mapi_query_done(hdl) != MOK))
continue; /* get more data */
- CHECK_RESULT(mid, hdl, continue, buf);
+ CHECK_RESULT(mid, hdl, continue, buf, fp);
mapi_close_handle(hdl);
hdl = NULL;
@@ -2558,7 +2560,7 @@ doFile(Mapi mid, stream *fp, int useinse
"" :
"AND system =
false"));
hdl = mapi_query(mid, q);
- CHECK_RESULT(mid, hdl,
continue, buf);
+ CHECK_RESULT(mid, hdl,
continue, buf, fp);
while (fetch_row(hdl) == 5) {
name =
mapi_fetch_field(hdl, 0);
type =
mapi_fetch_field(hdl, 1);
@@ -2764,7 +2766,7 @@ doFile(Mapi mid, stream *fp, int useinse
if (hdl == NULL) {
timerStart();
hdl = mapi_query_prep(mid);
- CHECK_RESULT(mid, hdl, continue, buf);
+ CHECK_RESULT(mid, hdl, continue, buf, fp);
} else
timerResume();
@@ -2773,7 +2775,7 @@ doFile(Mapi mid, stream *fp, int useinse
if (length > 0) {
SQLsetSpecial(line);
mapi_query_part(hdl, line, length);
- CHECK_RESULT(mid, hdl, continue, buf);
+ CHECK_RESULT(mid, hdl, continue, buf, fp);
}
/* If the server wants more but we're at the
@@ -2791,7 +2793,7 @@ doFile(Mapi mid, stream *fp, int useinse
continue; /* done */
}
}
- CHECK_RESULT(mid, hdl, continue, buf);
+ CHECK_RESULT(mid, hdl, continue, buf, fp);
if (mapi_get_querytype(hdl) == Q_PREPARE) {
prepno = mapi_get_tableid(hdl);
@@ -2803,7 +2805,7 @@ doFile(Mapi mid, stream *fp, int useinse
if (rc == MMORE && (line != NULL || mapi_query_done(hdl) !=
MOK))
continue; /* get more data */
- CHECK_RESULT(mid, hdl, continue, buf);
+ CHECK_RESULT(mid, hdl, continue, buf, fp);
timerEnd();
mapi_close_handle(hdl);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list