Changeset: dd45b2fa8d6d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dd45b2fa8d6d
Modified Files:
monetdb5/mal/mal_client.h
monetdb5/mal/mal_import.c
monetdb5/mal/mal_private.h
monetdb5/mal/mal_profiler.c
monetdb5/mal/mal_session.c
monetdb5/modules/mal/mal_mapi.c
sql/server/rel_optimizer.c
Branch: sfcgal
Log Message:
Merge with default
diffs (290 lines):
diff --git a/monetdb5/mal/mal_client.h b/monetdb5/mal/mal_client.h
--- a/monetdb5/mal/mal_client.h
+++ b/monetdb5/mal/mal_client.h
@@ -18,10 +18,12 @@
#define CONSOLE 0
#define isAdministrator(X) (X==mal_clients)
-#define FREECLIENT 0
-#define FINISHCLIENT 1
-#define RUNCLIENT 2
-#define BLOCKCLIENT 3
+enum clientmode {
+ FREECLIENT,
+ FINISHCLIENT,
+ RUNCLIENT,
+ BLOCKCLIENT
+};
#define PROCESSTIMEOUT 2 /* seconds */
@@ -125,7 +127,7 @@ typedef struct CLIENT {
int debug;
void *mdb; /* context upon suspend */
str history; /* where to keep console history */
- short mode; /* FREECLIENT..BLOCKED */
+ enum clientmode mode; /* FREECLIENT..BLOCKED */
/*
* Client records are organized into a two-level dependency tree,
* where children may be created to deal with parallel processing
diff --git a/monetdb5/mal/mal_import.c b/monetdb5/mal/mal_import.c
--- a/monetdb5/mal/mal_import.c
+++ b/monetdb5/mal/mal_import.c
@@ -112,7 +112,7 @@ malLoadScript(Client c, str name, bstrea
bstream *oldfdin = c->fdin; \
int oldyycur = c->yycur; \
int oldlisting = c->listing; \
- int oldmode = c->mode; \
+ enum clientmode oldmode = c->mode; \
int oldblkmode = c->blkmode; \
str oldsrcFile = c->srcFile; \
ClientInput *oldbak = c->bak; \
@@ -121,7 +121,7 @@ malLoadScript(Client c, str name, bstrea
Symbol oldprg = c->curprg; \
MalStkPtr oldglb = c->glb /* ; added by caller */
#define restoreState3 \
- int oldmode = c->mode; \
+ enum clientmode oldmode = c->mode; \
int oldblkmode = c->blkmode; \
str oldsrcFile = c->srcFile; \
Module oldnspace = c->nspace; \
@@ -174,7 +174,7 @@ malInclude(Client c, str name, int listi
bstream *oldfdin = c->fdin;
int oldyycur = c->yycur;
int oldlisting = c->listing;
- int oldmode = c->mode;
+ enum clientmode oldmode = c->mode;
int oldblkmode = c->blkmode;
ClientInput *oldbak = c->bak;
str oldprompt = c->prompt;
diff --git a/monetdb5/mal/mal_private.h b/monetdb5/mal/mal_private.h
--- a/monetdb5/mal/mal_private.h
+++ b/monetdb5/mal/mal_private.h
@@ -12,8 +12,8 @@
#error this file should not be included outside its source directory
#endif
-#ifdef FREECLIENT
-/* FREECLIENT is defined in the same file as Client */
+#ifdef _MAL_CLIENT_H_
+/* _MAL_CLIENT_H_ is defined in the same file as Client */
__hidden void MCexitClient(Client c)
__attribute__((__visibility__("hidden")));
__hidden int MCreadClient(Client c)
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -786,19 +786,19 @@ clearTrace(void)
return; /* not initialized */
}
/* drop all trace tables */
- BBPunfix(TRACE_id_event->batCacheid);
- BBPunfix(TRACE_id_time->batCacheid);
- BBPunfix(TRACE_id_pc->batCacheid);
- BBPunfix(TRACE_id_thread->batCacheid);
- BBPunfix(TRACE_id_ticks->batCacheid);
- BBPunfix(TRACE_id_rssMB->batCacheid);
- BBPunfix(TRACE_id_tmpspace->batCacheid);
- BBPunfix(TRACE_id_inblock->batCacheid);
- BBPunfix(TRACE_id_oublock->batCacheid);
- BBPunfix(TRACE_id_minflt->batCacheid);
- BBPunfix(TRACE_id_majflt->batCacheid);
- BBPunfix(TRACE_id_nvcsw->batCacheid);
- BBPunfix(TRACE_id_stmt->batCacheid);
+ BBPclear(TRACE_id_event->batCacheid);
+ BBPclear(TRACE_id_time->batCacheid);
+ BBPclear(TRACE_id_pc->batCacheid);
+ BBPclear(TRACE_id_thread->batCacheid);
+ BBPclear(TRACE_id_ticks->batCacheid);
+ BBPclear(TRACE_id_rssMB->batCacheid);
+ BBPclear(TRACE_id_tmpspace->batCacheid);
+ BBPclear(TRACE_id_inblock->batCacheid);
+ BBPclear(TRACE_id_oublock->batCacheid);
+ BBPclear(TRACE_id_minflt->batCacheid);
+ BBPclear(TRACE_id_majflt->batCacheid);
+ BBPclear(TRACE_id_nvcsw->batCacheid);
+ BBPclear(TRACE_id_stmt->batCacheid);
TRACE_init = 0;
MT_lock_unset(&mal_contextLock);
initTrace();
diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -137,10 +137,9 @@ exit_streams( bstream *fin, stream *fout
{
if (fout && fout != GDKstdout) {
mnstr_flush(fout);
- mnstr_close(fout);
- mnstr_destroy(fout);
+ close_stream(fout);
}
- if (fin)
+ if (fin)
(void) bstream_destroy(fin);
}
@@ -422,7 +421,7 @@ MSserveClient(void *dummy)
c->glb = newGlobalStack(MAXGLOBALS + mb->vsize);
if (c->glb == NULL) {
showException(c->fdout, MAL, "serveClient", MAL_MALLOC_FAIL);
- c->mode = FINISHCLIENT + 1; /* == RUNCLIENT */
+ c->mode = RUNCLIENT;
} else {
c->glb->stktop = mb->vtop;
c->glb->blk = mb;
@@ -432,7 +431,7 @@ MSserveClient(void *dummy)
msg = defaultScenario(c);
if (msg) {
showException(c->fdout, MAL, "serveClient", "could not
initialize default scenario");
- c->mode = FINISHCLIENT + 1; /* == RUNCLIENT */
+ c->mode = RUNCLIENT;
GDKfree(msg);
} else {
do {
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
@@ -117,26 +117,27 @@ doChallenge(void *data)
stream *fdin = block_stream(((struct challengedata *) data)->in);
stream *fdout = block_stream(((struct challengedata *) data)->out);
bstream *bs;
- int len = 0;
+ ssize_t len = 0;
#ifdef _MSC_VER
srand((unsigned int) GDKusec());
#endif
- GDKfree(data);
if (buf == NULL || fdin == NULL || fdout == NULL){
- if (fdin) {
- mnstr_close(fdin);
- mnstr_destroy(fdin);
- }
- if (fdout) {
- mnstr_close(fdout);
- mnstr_destroy(fdout);
- }
+ if (fdin)
+ close_stream(fdin);
+ else
+ close_stream(((struct challengedata *) data)->in);
+ if (fdout)
+ close_stream(fdout);
+ else
+ close_stream(((struct challengedata *) data)->out);
+ GDKfree(data);
if (buf)
GDKfree(buf);
GDKsyserror("SERVERlisten:"MAL_MALLOC_FAIL);
return;
}
+ GDKfree(data);
/* generate the challenge string */
generateChallenge(challenge, 8, 12);
@@ -155,12 +156,10 @@ doChallenge(void *data)
free(algos);
mnstr_flush(fdout);
/* get response */
- if ((len = (int) mnstr_read_block(fdin, buf, 1, BLOCK)) < 0) {
- /* the client must have gone away, so no reason to write
something */
- mnstr_close(fdin);
- mnstr_destroy(fdin);
- mnstr_close(fdout);
- mnstr_destroy(fdout);
+ if ((len = mnstr_read_block(fdin, buf, 1, BLOCK)) < 0) {
+ /* the client must have gone away, so no reason to write
anything */
+ close_stream(fdin);
+ close_stream(fdout);
GDKfree(buf);
return;
}
@@ -175,16 +174,9 @@ doChallenge(void *data)
bs = bstream_create(fdin, 128 * BLOCK);
if (bs == NULL){
- if (fdin) {
- mnstr_close(fdin);
- mnstr_destroy(fdin);
- }
- if (fdout) {
- mnstr_close(fdout);
- mnstr_destroy(fdout);
- }
- if (buf)
- GDKfree(buf);
+ close_stream(fdin);
+ close_stream(fdout);
+ GDKfree(buf);
GDKsyserror("SERVERlisten:"MAL_MALLOC_FAIL);
return;
}
@@ -365,7 +357,7 @@ SERVERlistenThread(SOCKET *Sock)
fflush(stdout);
#endif
data = GDKmalloc(sizeof(*data));
- if (!data) {
+ if (data == NULL) {
closesocket(msgsock);
showException(GDKstdout, MAL, "initClient",
"cannot allocate memory");
@@ -373,13 +365,35 @@ SERVERlistenThread(SOCKET *Sock)
}
data->in = socket_rastream(msgsock, "Server read");
data->out = socket_wastream(msgsock, "Server write");
- if (MT_create_thread(&tid, doChallenge, data, MT_THR_JOINABLE))
{
+ if (data->in == NULL || data->out == NULL) {
+ if (data->out) {
+ /* send message if we can */
+ mnstr_printf(data->out,
+ "!internal server
error (cannot allocate "
+ "enough memory),
please try again later\n");
+ mnstr_flush(data->out);
+ }
+ showException(GDKstdout, MAL, "initClient",
+ "cannot allocate memory");
+ closesocket(msgsock);
+ if (data->in)
+ mnstr_destroy(data->in);
+ if (data->out)
+ mnstr_destroy(data->out);
+ GDKfree(data);
+ continue;
+ }
+ if (MT_create_thread(&tid, doChallenge, data, MT_THR_JOINABLE)
< 0) {
mnstr_printf(data->out, "!internal server error (cannot
fork new "
"client thread), please try
again later\n");
mnstr_flush(data->out);
showException(GDKstdout, MAL, "initClient",
"cannot fork new client
thread");
+ closesocket(msgsock);
+ mnstr_destroy(data->in);
+ mnstr_destroy(data->out);
GDKfree(data);
+ continue;
}
GDKregister(tid);
} while (!ATOMIC_GET(serverexiting, atomicLock) &&
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -223,6 +223,8 @@ rel_properties(mvc *sql, global_props *g
switch (rel->op) {
case op_basetable:
case op_table:
+ if (rel->op == op_table && rel->l)
+ rel_properties(sql, gp, rel->l);
break;
case op_join:
case op_left:
@@ -7839,6 +7841,10 @@ rewrite_topdown(mvc *sql, sql_rel *rel,
switch (rel->op) {
case op_basetable:
case op_table:
+ if (rel->op == op_table && rel->l)
+ rel->l = rewrite(sql, rel->l, rewriter, has_changes);
+ if (rel->op == op_table && rel->l)
+ rel->l = rewrite_topdown(sql, rel->l, rewriter,
has_changes);
break;
case op_join:
case op_left:
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list