Changeset: f1b88ecf71b6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f1b88ecf71b6
Modified Files:
        monetdb5/mal/mal.c
        monetdb5/mal/mal_authorize.c
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_embedded.c
        monetdb5/mal/mal_import.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_private.h
        sql/backends/monet5/sql.c
        sql/server/rel_schema.c
        sql/server/sql_mvc.c
Branch: Sep2022
Log Message:

removed (as much as possible in this branch) the get/setClientContext.
Moved some code from mal to sql layer (get password for AUTHadd remote).
This solves crash(assert) in monetdbe.


diffs (truncated from 452 to 300 lines):

diff --git a/monetdb5/mal/mal.c b/monetdb5/mal/mal.c
--- a/monetdb5/mal/mal.c
+++ b/monetdb5/mal/mal.c
@@ -43,93 +43,13 @@ MT_Lock     mal_copyLock = MT_LOCK_INITI
 MT_Lock     mal_delayLock = MT_LOCK_INITIALIZER(mal_delayLock);
 
 
-
-#ifdef HAVE_PTHREAD_H
-
-static pthread_key_t tl_client_key;
-
-static int
-initialize_tl_client_key(void)
-{
-       static bool initialized = false;
-       if (initialized)
-               return 0;
-
-       if (pthread_key_create(&tl_client_key, NULL) != 0)
-               return -1;
-
-       initialized = true;
-       return 0;
-}
-
 /* declared in mal_interpreter.h so MAL operators can access it */
 Client
 getClientContext(void)
 {
-       if (initialize_tl_client_key())
-               return NULL;
-       return (Client) pthread_getspecific(tl_client_key);
-}
-
-/* declared in mal_private.h so only the MAL interpreter core can access it */
-Client
-setClientContext(Client cntxt)
-{
-       Client old = getClientContext();
-
-       if (pthread_setspecific(tl_client_key, cntxt) != 0)
-               GDKfatal("Failed to set thread local Client context");
-
-       return old;
+       return NULL;
 }
 
-#elif defined(WIN32)
-
-static DWORD tl_client_key = 0;
-
-static int
-initialize_tl_client_key(void)
-{
-       static bool initialized = false;
-       if (initialized)
-               return 0;
-
-       DWORD key = TlsAlloc();
-       if (key == TLS_OUT_OF_INDEXES)
-               return -1;
-
-       tl_client_key = key;
-       initialized = true;
-       return 0;
-}
-
-/* declared in mal_interpreter.h so MAL operators can access it */
-Client
-getClientContext(void)
-{
-       if (initialize_tl_client_key())
-               return NULL;
-       return (Client) TlsGetValue(tl_client_key);
-}
-
-/* declared in mal_private.h so only the MAL interpreter core can access it */
-Client
-setClientContext(Client cntxt)
-{
-       Client old = getClientContext();
-
-       if (TlsSetValue(tl_client_key, cntxt) == 0)
-               GDKfatal("Failed to set thread local Client context");
-
-       return old;
-}
-
-#else
-
-#error "no pthreads and no Win32, don't know what to do"
-
-#endif
-
 const char *
 mal_version(void)
 {
@@ -160,9 +80,6 @@ mal_init(char *modules[], bool embedded,
                return -1;
        }
 
-       if (initialize_tl_client_key() != 0)
-               return -1;
-
        if ((err = AUTHinitTables()) != MAL_SUCCEED) {
                freeException(err);
                return -1;
diff --git a/monetdb5/mal/mal_authorize.c b/monetdb5/mal/mal_authorize.c
--- a/monetdb5/mal/mal_authorize.c
+++ b/monetdb5/mal/mal_authorize.c
@@ -715,25 +715,17 @@ AUTHaddRemoteTableCredentials(const char
                        return output;
        }
 
-       if (pass == NULL) {
-               // init client to have SQL callback hooks
-               Client c = getClientContext();
-               if((output = AUTHgetPasswordHash(&pwhash, c, local_user)) != 
MAL_SUCCEED)
-                       return output;
-       }
-       else {
-               free_pw = true;
-               if (pw_encrypted) {
-                       if((pwhash = strdup(pass)) == NULL)
-                               throw(MAL, "addRemoteTableCredentials", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
-               }
-               else {
-                       /* Note: the remote server might have used a different
-                        * algorithm to hash the pwhash.
-                        */
-                       if((pwhash = mcrypt_BackendSum(pass, strlen(pass))) == 
NULL)
-                               throw(MAL, "addRemoteTableCredentials", 
SQLSTATE(42000) "Crypt backend hash not found");
-               }
+       assert(pass);
+       free_pw = true;
+       if (pw_encrypted) {
+               if((pwhash = strdup(pass)) == NULL)
+                       throw(MAL, "addRemoteTableCredentials", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+       } else {
+               /* Note: the remote server might have used a different
+                * algorithm to hash the pwhash.
+                */
+               if((pwhash = mcrypt_BackendSum(pass, strlen(pass))) == NULL)
+                       throw(MAL, "addRemoteTableCredentials", SQLSTATE(42000) 
"Crypt backend hash not found");
        }
        msg = AUTHverifyPassword(pwhash);
        if( msg != MAL_SUCCEED){
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
@@ -218,7 +218,6 @@ MCexitClient(Client c)
                                          &(struct NonMalEvent)
                                          {CLIENT_END, c, Tend,  NULL, NULL, 0, 
Tend-(c->session)});
        }
-       setClientContext(NULL);
 }
 
 static Client
@@ -303,12 +302,8 @@ MCinitClient(oid user, bstream *fin, str
 
        MT_lock_set(&mal_contextLock);
        c = MCnewClient();
-       if (c) {
-               Client c_old = setClientContext(c);
-               (void) c_old;
-               assert(NULL == c_old);
+       if (c)
                c = MCinitClientRecord(c, user, fin, fout);
-       }
        MT_lock_unset(&mal_contextLock);
 
        if (c && profilerStatus > 0)
diff --git a/monetdb5/mal/mal_embedded.c b/monetdb5/mal/mal_embedded.c
--- a/monetdb5/mal/mal_embedded.c
+++ b/monetdb5/mal/mal_embedded.c
@@ -45,7 +45,7 @@ static bool embeddedinitialized = false;
 str
 malEmbeddedBoot(int workerlimit, int memorylimit, int querytimeout, int 
sessiontimeout, bool with_mapi_server)
 {
-       Client c, c_old;
+       Client c;
        str msg = MAL_SUCCEED;
 
        if( embeddedinitialized )
@@ -100,7 +100,6 @@ malEmbeddedBoot(int workerlimit, int mem
        initParser();
        initHeartbeat();
        // initResource();
-       c_old = setClientContext(NULL); //save context
        c = MCinitClient((oid) 0, 0, 0);
        if(c == NULL)
                throw(MAL, "malEmbeddedBoot", "Failed to initialize client");
@@ -111,37 +110,31 @@ malEmbeddedBoot(int workerlimit, int mem
        c->curmodule = c->usermodule = userModule();
        if(c->usermodule == NULL) {
                MCcloseClient(c);
-               setClientContext(c_old); // restore context
                throw(MAL, "malEmbeddedBoot", "Failed to initialize client MAL 
module");
        }
        if ( (msg = defaultScenario(c)) ) {
                MCcloseClient(c);
-               setClientContext(c_old); // restore context
                return msg;
        }
        if ((msg = MSinitClientPrg(c, "user", "main")) != MAL_SUCCEED) {
                MCcloseClient(c);
-               setClientContext(c_old); // restore context
                return msg;
        }
        char *modules[5] = { "embedded", "sql", "generator", "udf" };
        if ((msg = malIncludeModules(c, modules, 0, !with_mapi_server, NULL)) 
!= MAL_SUCCEED) {
                MCcloseClient(c);
-               setClientContext(c_old); // restore context
                return msg;
        }
        pushEndInstruction(c->curprg->def);
        msg = chkProgram(c->usermodule, c->curprg->def);
        if ( msg != MAL_SUCCEED || (msg= c->curprg->def->errors) != MAL_SUCCEED 
) {
                MCcloseClient(c);
-               setClientContext(c_old); // restore context
                return msg;
        }
        msg = MALengine(c);
        if (msg == MAL_SUCCEED)
                embeddedinitialized = true;
        MCcloseClient(c);
-       setClientContext(c_old); // restore context
        initProfiler();
        return msg;
 }
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
@@ -276,7 +276,7 @@ malInclude(Client c, const char *name, i
 str
 evalFile(str fname, int listing)
 {
-       Client c, c_old;
+       Client c;
        stream *fd;
        str filename;
        str msg = MAL_SUCCEED;
@@ -297,7 +297,6 @@ evalFile(str fname, int listing)
                        close_stream(fd);
                throw(MAL,"mal.eval",SQLSTATE(HY013) MAL_MALLOC_FAIL);
        }
-       c_old = setClientContext(NULL); // save context
        c = MCinitClient(MAL_ADMIN, bs, 0);
        if( c == NULL){
                throw(MAL,"mal.eval","Can not create user context");
@@ -305,7 +304,6 @@ evalFile(str fname, int listing)
        c->curmodule = c->usermodule = userModule();
        if(c->curmodule == NULL) {
                MCcloseClient(c);
-               setClientContext(c_old); // restore context
                throw(MAL,"mal.eval",SQLSTATE(HY013) MAL_MALLOC_FAIL);
        }
        c->promptlength = 0;
@@ -313,18 +311,15 @@ evalFile(str fname, int listing)
 
        if ( (msg = defaultScenario(c)) ) {
                MCcloseClient(c);
-               setClientContext(c_old); // restore context
                return msg;
        }
        if((msg = MSinitClientPrg(c, "user", "main")) != MAL_SUCCEED) {
                MCcloseClient(c);
-               setClientContext(c_old); // restore context
                return msg;
        }
 
        msg = runScenario(c,0);
        MCcloseClient(c);
-       setClientContext(c_old); // restore context
        return msg;
 }
 
@@ -348,7 +343,7 @@ mal_cmdline(char *s, size_t *len)
 str
 compileString(Symbol *fcn, Client cntxt, str s)
 {
-       Client c, c_old;
+       Client c;
        size_t len = strlen(s);
        buffer *b;
        str msg = MAL_SUCCEED;
@@ -387,7 +382,6 @@ compileString(Symbol *fcn, Client cntxt,
        }
        strncpy(fdin->buf, qry, len+1);
 
-       c_old = setClientContext(NULL); // save context
        // compile in context of called for
        c = MCinitClient(MAL_ADMIN, fdin, 0);
        if( c == NULL){
@@ -404,7 +398,6 @@ compileString(Symbol *fcn, Client cntxt,
                GDKfree(b);
                c->usermodule= 0;
                MCcloseClient(c);
-               setClientContext(c_old); // restore context
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to