Changeset: 80be6b7adaf4 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/80be6b7adaf4 Branch: default Log Message:
Merge with Jun2023 branch. diffs (173 lines): diff --git a/monetdb5/mal/mal_namespace.c b/monetdb5/mal/mal_namespace.c --- a/monetdb5/mal/mal_namespace.c +++ b/monetdb5/mal/mal_namespace.c @@ -23,21 +23,23 @@ MT_Lock mal_namespaceLock = MT_LOCK_INITIALIZER(mal_namespaceLock); /* taken from gdk_atoms */ -#define NME_HASH(_key,y,K) \ - do { \ - size_t _i; \ - for (_i = y = 0; _i < K && _key[_i]; _i++) { \ - y += _key[_i]; \ - y += (y << 10); \ - y ^= (y >> 6); \ - } \ - y += (y << 3); \ - y ^= (y >> 11); \ - y += (y << 15); \ - y = y & HASHMASK; \ - } while (0) +static inline size_t __attribute__((__pure__)) +nme_hash(const char *key, size_t len) +{ + size_t y = 0; -typedef struct NAME{ + for (size_t i = 0; i < len && key[i]; i++) { + y += key[i]; + y += (y << 10); + y ^= (y >> 6); + } + y += (y << 3); + y ^= (y >> 11); + y += (y << 15); + return y & HASHMASK; +} + +typedef struct NAME { struct NAME *next; char nme[IDLENGTH + 1]; unsigned short length; @@ -51,15 +53,18 @@ static struct namespace { struct namespace *next; int count; struct NAME data[4096]; -} *namespace; +} namespace1, *namespace = &namespace1; -void initNamespace(void) { - namespace = NULL; +void +initNamespace(void) +{ optimizerRef = putName("optimizer"); totalRef = putName("total"); } -void mal_namespace_reset(void) { +void +mal_namespace_reset(void) +{ struct namespace *ns; /* assume we are at the end of the server session */ @@ -67,9 +72,13 @@ void mal_namespace_reset(void) { memset(hash, 0, sizeof(hash)); while (namespace) { ns = namespace->next; - GDKfree(namespace); + if (namespace != &namespace1) + GDKfree(namespace); namespace = ns; } + namespace1.count = 0; + namespace1.next = NULL; + namespace = &namespace1; MT_lock_unset(&mal_namespaceLock); } @@ -80,7 +89,8 @@ void mal_namespace_reset(void) { * is conflict free. */ -static const char *findName(const char *nme, size_t len, bool allocate) +static const char * +findName(const char *nme, size_t len, bool allocate) { NamePtr *n, m; size_t key; @@ -91,31 +101,13 @@ static const char *findName(const char * if (len > IDLENGTH) { len = IDLENGTH; } - NME_HASH(nme, key, len); + key = nme_hash(nme, len); MT_lock_set(&mal_namespaceLock); for (n = &hash[key]; *n; n = &(*n)->next) { -#ifdef KEEP_SORTED - /* keep each list sorted on length, then name */ - if (len < (*n)->length) - continue; - if (len == (*n)->length) { - int c; - if ((c = strncmp(nme, (*n)->nme, len)) < 0) - continue; - if (c == 0) { - MT_lock_unset(&mal_namespaceLock); - return (*n)->nme; - } - break; - } - break; -#else - /* append entries to list */ if (len == (*n)->length && strncmp(nme, (*n)->nme, len) == 0) { MT_lock_unset(&mal_namespaceLock); return (*n)->nme; } -#endif } /* item not found */ if (!allocate) { @@ -127,7 +119,6 @@ static const char *findName(const char * if (ns == NULL) { /* error we cannot recover from */ GDKfatal(MAL_MALLOC_FAIL); - exit(1); } ns->next = namespace; ns->count = 0; @@ -140,23 +131,33 @@ static const char *findName(const char * m->next = *n; *n = m; MT_lock_unset(&mal_namespaceLock); - return (*n)->nme; + return m->nme; } -const char *getName(const char *nme) { - return findName(nme, nme?strlen(nme):0, false); +const char * +getName(const char *nme) +{ + if (nme != NULL) + nme = findName(nme, strlen(nme), false); + return nme; } -const char *getNameLen(const char *nme, size_t len) +const char * +getNameLen(const char *nme, size_t len) { return findName(nme, len, false); } -const char *putName(const char *nme) { - return findName(nme, nme?strlen(nme):0, true); +const char * +putName(const char *nme) +{ + if (nme != NULL) + nme = findName(nme, strlen(nme), true); + return nme; } -const char *putNameLen(const char *nme, size_t len) +const char * +putNameLen(const char *nme, size_t len) { return findName(nme, len, true); } diff --git a/sql/test/BugTracker-2023/Tests/SingleServer b/sql/test/BugTracker-2023/Tests/SingleServer new file mode 100644 _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org