Changeset: 9596dfbb57e0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9596dfbb57e0
Modified Files:
monetdb5/modules/mal/mal_mapi.c
Branch: Jun2016
Log Message:
Check that allocations succeed, and do so before forking.
Also don't send message to client that doesn't know how to deal with it.
diffs (58 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
@@ -114,8 +114,8 @@ doChallenge(void *data)
char *buf = (char *) GDKmalloc(BLOCK + 1);
char challenge[13];
char *algos;
- stream *fdin = block_stream(((struct challengedata *) data)->in);
- stream *fdout = block_stream(((struct challengedata *) data)->out);
+ stream *fdin = ((struct challengedata *) data)->in;
+ stream *fdout = ((struct challengedata *) data)->out;
bstream *bs;
int len = 0;
@@ -372,16 +372,36 @@ SERVERlistenThread(SOCKET *Sock)
}
data->in = socket_rastream(msgsock, "Server read");
data->out = socket_wastream(msgsock, "Server write");
+ if (data->in == NULL || data->out == NULL) {
+ mnstr_destroy(data->in);
+ mnstr_destroy(data->out);
+ GDKfree(data);
+ closesocket(msgsock);
+ showException(GDKstdout, MAL, "initClient",
+ "cannot allocate stream");
+ continue;
+ }
+ data->in = block_stream(data->in);
+ data->out = block_stream(data->out);
+ if (data->in == NULL || data->out == NULL) {
+ mnstr_destroy(data->in);
+ mnstr_destroy(data->out);
+ GDKfree(data);
+ closesocket(msgsock);
+ showException(GDKstdout, MAL, "initClient",
+ "cannot allocate stream");
+ continue;
+ }
if (MT_create_thread(&tid, doChallenge, data, MT_THR_JOINABLE))
{
- mnstr_printf(data->out, "!internal server error (cannot
fork new "
- "client thread), please try
again later\n");
- mnstr_flush(data->out);
+ mnstr_destroy(data->in);
+ mnstr_destroy(data->out);
+ GDKfree(data);
+ closesocket(msgsock);
showException(GDKstdout, MAL, "initClient",
"cannot fork new client
thread");
- GDKfree(data);
- closesocket(msgsock);
- } else
- GDKregister(tid);
+ continue;
+ }
+ GDKregister(tid);
} while (!ATOMIC_GET(serverexiting, atomicLock) &&
!GDKexiting());
(void) ATOMIC_DEC(nlistener, atomicLock);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list