New upstream version 17.11-rc3
[deb_dpdk.git] / examples / performance-thread / common / lthread_tls.c
index 47505f2..2259fad 100644 (file)
@@ -62,9 +62,7 @@ RTE_DEFINE_PER_LTHREAD(void *, dummy);
 
 static struct lthread_key key_table[LTHREAD_MAX_KEYS];
 
-void lthread_tls_ctor(void) __attribute__((constructor));
-
-void lthread_tls_ctor(void)
+RTE_INIT(thread_tls_ctor)
 {
        key_pool = NULL;
        key_pool_init = 0;
@@ -198,11 +196,12 @@ void _lthread_tls_destroy(struct lthread *lt)
 void
 *lthread_getspecific(unsigned int k)
 {
+       void *res = NULL;
 
-       if (k > LTHREAD_MAX_KEYS)
-               return NULL;
+       if (k < LTHREAD_MAX_KEYS)
+               res = THIS_LTHREAD->tls->data[k];
 
-       return THIS_LTHREAD->tls->data[k];
+       return res;
 }
 
 /*
@@ -212,7 +211,7 @@ void
  */
 int lthread_setspecific(unsigned int k, const void *data)
 {
-       if (k > LTHREAD_MAX_KEYS)
+       if (k >= LTHREAD_MAX_KEYS)
                return POSIX_ERRNO(EINVAL);
 
        int n = THIS_LTHREAD->tls->nb_keys_inuse;