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