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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to