Close #19787: PyThread_set_key_value() now always set the value. In Python 3.3,

the function did nothing if the key already exists (if the current value is a
non-NULL pointer).

_testcapi.run_in_subinterp() now correctly sets the new Python thread state of
the current thread when a subinterpreter is created.
This commit is contained in:
Victor Stinner 2013-12-13 03:22:00 +01:00
parent 24bd028092
commit cd0cb8ccd3
7 changed files with 24 additions and 30 deletions

View file

@ -389,20 +389,11 @@ PyThread_delete_key(int key)
TlsFree(key);
}
/* We must be careful to emulate the strange semantics implemented in thread.c,
* where the value is only set if it hasn't been set before.
*/
int
PyThread_set_key_value(int key, void *value)
{
BOOL ok;
void *oldvalue;
assert(value != NULL);
oldvalue = TlsGetValue(key);
if (oldvalue != NULL)
/* ignore value if already set */
return 0;
ok = TlsSetValue(key, value);
if (!ok)
return -1;