Changeset: 29e407599343 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/29e407599343
Modified Files:
clients/examples/C/streamcat.c
clients/mapiclient/msqldump.c
clients/mapilib/mapi.c
monetdb5/modules/mal/tablet.c
sql/backends/monet5/sql_result.c
sql/storage/store.c
tools/merovingian/daemon/snapshot.c
Branch: default
Log Message:
Avoid malloc/free where we can by using mnstr_peek_error instead of mnstr_error.
Also fix some memory leaks right before exit ;-) .
diffs (208 lines):
diff --git a/clients/examples/C/streamcat.c b/clients/examples/C/streamcat.c
--- a/clients/examples/C/streamcat.c
+++ b/clients/examples/C/streamcat.c
@@ -164,7 +164,7 @@ int cmd_read(char *argv[])
s = opener(filename);
if (s == NULL || mnstr_errnr(s) != MNSTR_NO__ERROR) {
- char *msg = mnstr_error(s);
+ const char *msg = mnstr_peek_error(s);
croak(2, "Opener %s failed: %s", opener_name, msg ? msg : "<no
error message>");
}
@@ -200,7 +200,7 @@ int cmd_read(char *argv[])
if (wrapper != NULL)
s = wrapper(s, parms);
if (s == NULL || mnstr_errnr(s) != MNSTR_NO__ERROR) {
- char *msg = mnstr_error(s);
+ const char *msg = mnstr_peek_error(s);
croak(2, "Opener %s failed: %s", opener_name, msg ? msg
: "<no error message>");
}
}
@@ -269,7 +269,7 @@ int cmd_write(char *argv[])
s = opener(filename);
if (s == NULL || mnstr_errnr(s) != MNSTR_NO__ERROR) {
- char *msg = mnstr_error(NULL);
+ const char *msg = mnstr_peek_error(NULL);
croak(2, "Opener %s failed: %s", opener_name, msg ? msg : "");
}
@@ -313,7 +313,7 @@ int cmd_write(char *argv[])
if (wrapper != NULL)
s = wrapper(s, parms);
if (s == NULL || mnstr_errnr(s) != MNSTR_NO__ERROR) {
- char *msg = mnstr_error(s);
+ const char *msg = mnstr_peek_error(s);
croak(2, "Opener %s failed: %s", opener_name, msg ? msg
: "<no error message>");
}
}
@@ -350,7 +350,7 @@ static void copy_stream_to_file(stream *
iterations += 1;
nread = mnstr_read(in, buffer, 1, bufsize);
if (nread < 0)
- croak(2, "Error reading from stream after %" PRIu64 "
bytes: %s", total, mnstr_error(in));
+ croak(2, "Error reading from stream after %" PRIu64 "
bytes: %s", total, mnstr_peek_error(in));
if (nread == 0) {
// eof
break;
@@ -395,15 +395,15 @@ static void copy_file_to_stream(FILE *in
}
nwritten = mnstr_write(out, buffer, 1, nread);
if (nwritten < 0)
- croak(2, "Write error after %" PRId64 " bytes: %s",
total, mnstr_error(out));
+ croak(2, "Write error after %" PRId64 " bytes: %s",
total, mnstr_peek_error(out));
if ((size_t)nwritten != nread)
croak(2, "Partial write (%lu/%lu bytes) after %" PRId64
" bytes: %s",
(unsigned long)nwritten, (unsigned long)nread,
- total + (int64_t)nwritten, mnstr_error(out));
+ total + (int64_t)nwritten,
mnstr_peek_error(out));
total += (int64_t)nwritten;
if (do_flush)
if (mnstr_flush(out, flush_level) != 0)
- croak(2, "Flush failed after %" PRId64 " bytes:
%s", total, mnstr_error(out));
+ croak(2, "Flush failed after %" PRId64 " bytes:
%s", total, mnstr_peek_error(out));
}
free(buffer);
diff --git a/clients/mapiclient/msqldump.c b/clients/mapiclient/msqldump.c
--- a/clients/mapiclient/msqldump.c
+++ b/clients/mapiclient/msqldump.c
@@ -276,9 +276,7 @@ main(int argc, char **argv)
mapi_destroy(mid);
if (mnstr_errnr(out) != MNSTR_NO__ERROR) {
- char *err = mnstr_error(out);
- fprintf(stderr, "%s: %s\n", argv[0], err);
- free(err);
+ fprintf(stderr, "%s: %s\n", argv[0], mnstr_peek_error(out));
return 1;
}
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -1588,9 +1588,7 @@ close_result(MapiHdl hdl)
if (mnstr_printf(mid->to, "%s", msg) < 0 ||
mnstr_flush(mid->to, MNSTR_FLUSH_DATA)) {
close_connection(mid);
- char *err = mnstr_error(mid->to);
- mapi_setError(mid, err, __func__,
MTIMEOUT);
- free(err);
+ mapi_setError(mid,
mnstr_peek_error(mid->to), __func__, MTIMEOUT);
break;
}
read_into_cache(hdl, 0);
@@ -1608,9 +1606,7 @@ close_result(MapiHdl hdl)
if (mnstr_printf(mid->to, "%s", msg) < 0 ||
mnstr_flush(mid->to, MNSTR_FLUSH_DATA)) {
close_connection(mid);
- char *err = mnstr_error(mid->to);
- mapi_setError(mid, err, __func__,
MTIMEOUT);
- free(err);
+ mapi_setError(mid,
mnstr_peek_error(mid->to), __func__, MTIMEOUT);
} else
read_into_cache(hdl, 0);
}
@@ -1834,9 +1830,7 @@ finish_handle(MapiHdl hdl)
if (mnstr_printf(mid->to, "%s", msg) < 0 ||
mnstr_flush(mid->to, MNSTR_FLUSH_DATA)) {
close_connection(mid);
- char *err = mnstr_error(mid->to);
- mapi_setError(mid, err, __func__, MTIMEOUT);
- free(err);
+ mapi_setError(mid, mnstr_peek_error(mid->to),
__func__, MTIMEOUT);
break;
}
read_into_cache(hdl, 0);
@@ -3428,9 +3422,7 @@ mapi_Xcommand(Mapi mid, const char *cmdn
if (mnstr_printf(mid->to, "X" "%s %s\n", cmdname, cmdvalue) < 0 ||
mnstr_flush(mid->to, MNSTR_FLUSH_DATA)) {
close_connection(mid);
- char *err = mnstr_error(mid->to);
- mapi_setError(mid, err, __func__, MTIMEOUT);
- free(err);
+ mapi_setError(mid, mnstr_peek_error(mid->to), __func__,
MTIMEOUT);
return MERROR;
}
if (mid->tracelog) {
@@ -4740,9 +4732,7 @@ mapi_cache_limit(Mapi mid, int limit)
if (mnstr_printf(mid->to, "X" "reply_size %d\n", limit) < 0 ||
mnstr_flush(mid->to, MNSTR_FLUSH_DATA)) {
close_connection(mid);
- char *err = mnstr_error(mid->to);
- mapi_setError(mid, err, __func__, MTIMEOUT);
- free(err);
+ mapi_setError(mid, mnstr_peek_error(mid->to), __func__,
MTIMEOUT);
return MERROR;
}
hdl = prepareQuery(mapi_new_handle(mid), "reply_size");
diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c
--- a/monetdb5/modules/mal/tablet.c
+++ b/monetdb5/modules/mal/tablet.c
@@ -249,10 +249,9 @@ tablet_skip_string(char *s, char quote,
static int
TABLET_error(stream *s)
{
- char *err = mnstr_error(s);
- /* use free as stream allocates outside GDK */
+ const char *err = mnstr_peek_error(s);
if (err)
- free(err);
+ TRC_ERROR(MAL_SERVER, "Stream error: %s\n", err);
return -1;
}
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -541,9 +541,8 @@ mvc_import_table(Client cntxt, BAT ***ba
throw(IO, "sql.copy_from", SQLSTATE(42000) "No stream (pointer)
provided");
if (mnstr_errnr(bs->s) != MNSTR_NO__ERROR) {
mnstr_error_kind errnr = mnstr_errnr(bs->s);
- char *stream_msg = mnstr_error(bs->s);
+ const char *stream_msg = mnstr_peek_error(bs->s);
msg = createException(IO, "sql.copy_from", SQLSTATE(42000)
"Stream not open %s: %s", mnstr_error_kind_name(errnr), stream_msg ? stream_msg
: "unknown error");
- free(stream_msg);
return msg;
}
if (offset < 0 || offset > (lng) BUN_MAX)
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2445,9 +2445,7 @@ tar_write_header(stream *tarfile, const
tar_write_header_field(&chksum, 8, "%06o", sum);
if (mnstr_write(tarfile, buf, TAR_BLOCK_SIZE, 1) != 1) {
- char *err = mnstr_error(tarfile);
- GDKerror("error writing tar header %s: %s", path, err);
- free(err);
+ GDKerror("error writing tar header %s: %s", path,
mnstr_peek_error(tarfile));
return GDK_FAIL;
}
@@ -2530,9 +2528,7 @@ tar_copy_stream(stream *tarfile, const c
ssize_t chunk = (to_read <= bufsize) ? to_read : bufsize;
ssize_t nbytes = mnstr_read(contents, buf, 1, chunk);
if (nbytes != chunk) {
- char *err = mnstr_error(contents);
- GDKerror("Read only %zd/%zd bytes of component %s: %s",
nbytes, chunk, path, err);
- free(err);
+ GDKerror("Read only %zd/%zd bytes of component %s: %s",
nbytes, chunk, path, mnstr_peek_error(contents));
goto end;
}
ret = tar_write(tarfile, buf, chunk);
diff --git a/tools/merovingian/daemon/snapshot.c
b/tools/merovingian/daemon/snapshot.c
--- a/tools/merovingian/daemon/snapshot.c
+++ b/tools/merovingian/daemon/snapshot.c
@@ -744,9 +744,7 @@ read_tar_block(stream *s, char *block, e
if (nread <= 0) {
if (mnstr_errnr(s) != MNSTR_NO__ERROR) {
/* failure */
- char *err = mnstr_error(s);
- *error = newErr("Read error (%zd): %s", nread, err);
- free(err);
+ *error = newErr("Read error (%zd): %s", nread,
mnstr_peek_error(s));
} else {
*error = NULL;
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]