diff options
Diffstat (limited to 'Python/thread.c')
| -rw-r--r-- | Python/thread.c | 20 | 
1 files changed, 12 insertions, 8 deletions
diff --git a/Python/thread.c b/Python/thread.c index 5396ca30e3..8540942e28 100644 --- a/Python/thread.c +++ b/Python/thread.c @@ -205,7 +205,7 @@ static int nkeys = 0;  /* PyThread_create_key() hands out nkeys+1 next */   * segfaults.  Now we lock the whole routine.   */  static struct key * -find_key(int key, int update, void *value) +find_key(int key, void *value)  {      struct key *p, *prev_p;      long id = PyThread_get_thread_ident(); @@ -215,11 +215,8 @@ find_key(int key, int update, void *value)      PyThread_acquire_lock(keymutex, 1);      prev_p = NULL;      for (p = keyhead; p != NULL; p = p->next) { -        if (p->id == id && p->key == key) { -            if (update) -                p->value = value; +        if (p->id == id && p->key == key)              goto Done; -        }          /* Sanity check.  These states should never happen but if           * they do we must abort.  Otherwise we'll end up spinning in           * in a tight loop with the lock held.  A similar check is done @@ -230,7 +227,7 @@ find_key(int key, int update, void *value)          if (p->next == keyhead)              Py_FatalError("tls find_key: circular list(!)");      } -    if (!update && value == NULL) { +    if (value == NULL) {          assert(p == NULL);          goto Done;      } @@ -282,12 +279,19 @@ PyThread_delete_key(int key)      PyThread_release_lock(keymutex);  } +/* Confusing:  If the current thread has an association for key, + * value is ignored, and 0 is returned.  Else an attempt is made to create + * an association of key to value for the current thread.  0 is returned + * if that succeeds, but -1 is returned if there's not enough memory + * to create the association.  value must not be NULL. + */  int  PyThread_set_key_value(int key, void *value)  {      struct key *p; -    p = find_key(key, 1, value); +    assert(value != NULL); +    p = find_key(key, value);      if (p == NULL)          return -1;      else @@ -300,7 +304,7 @@ PyThread_set_key_value(int key, void *value)  void *  PyThread_get_key_value(int key)  { -    struct key *p = find_key(key, 0, NULL); +    struct key *p = find_key(key, NULL);      if (p == NULL)          return NULL;  | 
