Changeset: 96acfa6e6cb9 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=96acfa6e6cb9
Modified Files:
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_client.h
        tools/embedded/embedded.c
Branch: embedded
Log Message:

using mal client admin


diffs (173 lines):

diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -588,6 +588,25 @@ MCreadClient(Client c)
        return 1;
 }
 
+
+int
+MCvalid(Client tc)
+{
+       Client c;
+       if (tc == NULL) {
+               return 0;
+       }
+       MT_lock_set(&mal_contextLock);
+       for (c = mal_clients; c < mal_clients + MAL_MAXCLIENTS; c++) {
+               if (c == tc && c->mode == RUNCLIENT) {
+                       MT_lock_unset(&mal_contextLock);
+                       return 1;
+               }
+       }
+       MT_lock_unset(&mal_contextLock);
+       return 0;
+}
+
 str
 PROFinitClient(Client c){
        (void) c;
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
@@ -197,6 +197,7 @@ mal_export void    MCcloseClient(Client 
 mal_export str     MCsuspendClient(int id);
 mal_export str     MCawakeClient(int id);
 mal_export int     MCpushClientInput(Client c, bstream *new_input, int 
listing, char *prompt);
+mal_export int    MCvalid(Client c);
 
 mal_export str PROFinitClient(Client c);
 mal_export str PROFexitClient(Client c);
diff --git a/tools/embedded/embedded.c b/tools/embedded/embedded.c
--- a/tools/embedded/embedded.c
+++ b/tools/embedded/embedded.c
@@ -47,8 +47,6 @@ typedef void (*mvc_trans_ptr_tpe)(mvc*);
 mvc_trans_ptr_tpe mvc_trans_ptr = NULL;
 
 int monetdb_embedded_initialized = 0;
-#define EMBEDDED_MAX_CONNS 64
-static void *monetdb_embedded_connections[EMBEDDED_MAX_CONNS];
 
 static void* lookup_function(char* func) {
        void *dl, *fun;
@@ -61,62 +59,32 @@ static void* lookup_function(char* func)
        return fun;
 }
 
-static int monetdb_valid_conn(void* conn) {
-       int i;
-       if (conn == NULL) {
-               return 0;
-       }
-       for (i = 0; i < EMBEDDED_MAX_CONNS; i++) {
-               if (conn == monetdb_embedded_connections[i]) {
-                       return 1;
-               }
-       }
-       return 0;
-}
-
 void* monetdb_connect() {
-       void **conn = NULL;
-       int i;
-
+       Client conn = NULL;
        if (!monetdb_embedded_initialized) {
                return NULL;
        }
-
-       for (i = 0; i < EMBEDDED_MAX_CONNS; i++) {
-               if (monetdb_embedded_connections[i] == NULL) {
-                       conn = &monetdb_embedded_connections[i];
-                       break;
-               }
-       }
-       if (conn == NULL) {
+       conn = MCforkClient(&mal_clients[0]);
+       if (!MCvalid((Client) conn)) {
                return NULL;
        }
-       Client c = MCforkClient(&mal_clients[0]);
-       if ((*SQLinitClient_ptr)(c) != MAL_SUCCEED) {
+       if ((*SQLinitClient_ptr)(conn) != MAL_SUCCEED) {
                return NULL;
        }
-       ((backend *) c->sqlcontext)->mvc->session->auto_commit = 1;
-       *conn = c;
-       return c;
+       ((backend *) conn->sqlcontext)->mvc->session->auto_commit = 1;
+       return conn;
 }
 
 void monetdb_disconnect(void* conn) {
-       int i;
-       if (!monetdb_valid_conn(conn)) {
+       if (!MCvalid((Client) conn)) {
                return;
        }
-       for (i = 0; i < EMBEDDED_MAX_CONNS; i++) {
-               if (conn == monetdb_embedded_connections[i]) {
-                       MCcloseClient((Client) conn);
-                       monetdb_embedded_connections[i] = NULL;
-                       return;
-               }
-       }
+       MCcloseClient((Client) conn);
 }
 
 char* monetdb_startup(char* dbdir, char silent) {
        opt *set = NULL;
-       int setlen = 0, i;
+       int setlen = 0;
        str retval = MAL_SUCCEED;
        char* sqres = NULL;
        void* res = NULL;
@@ -151,10 +119,6 @@ char* monetdb_startup(char* dbdir, char 
        GDKsetenv("mapi_disable", "true");
        GDKsetenv("sql_optimizer", "sequential_pipe");
 
-       for (i = 0; i < EMBEDDED_MAX_CONNS; i++) {
-               monetdb_embedded_connections[i] = NULL;
-       }
-
        if (silent) THRdata[0] = stream_blackhole_create();
        msab_dbpathinit(dbdir);
 
@@ -218,7 +182,7 @@ char* monetdb_query(void* conn, char* qu
        if (!monetdb_embedded_initialized) {
                return GDKstrdup("Embedded MonetDB is not started");
        }
-       if (!monetdb_valid_conn(conn)) {
+       if (!MCvalid((Client) conn)) {
                return GDKstrdup("Invalid connection");
        }
        m = ((backend *) c->sqlcontext)->mvc;
@@ -257,9 +221,7 @@ char* monetdb_append(void* conn, const c
        str res = MAL_SUCCEED;
        VarRecord bat_varrec;
        Client c = (Client) conn;
-       mvc* m = ((backend *) c->sqlcontext)->mvc;
-
-       // TODO: check client pointer
+       mvc* m;
 
        if (!monetdb_embedded_initialized) {
                return GDKstrdup("Embedded MonetDB is not started");
@@ -267,9 +229,10 @@ char* monetdb_append(void* conn, const c
        if(table == NULL || data == NULL || ncols < 1) {
                return GDKstrdup("Invalid parameters");
        }
-       if (!monetdb_valid_conn(conn)) {
+       if (!MCvalid((Client) conn)) {
                return GDKstrdup("Invalid connection");
        }
+       m = ((backend *) c->sqlcontext)->mvc;
 
        // very black MAL magic below
        mb.var = GDKmalloc(nvar * sizeof(VarRecord*));
@@ -362,4 +325,5 @@ void monetdb_shutdown() {
        // clean up global state
        BBPresetfarms();
        monetdb_embedded_initialized = 0;
+       // TODO: reset all mal clients
 }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to