1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
# mode: run
from cpython.pythread cimport *
cdef Py_tss_t *pass_py_tss_t_ptr(Py_tss_t *value):
return value
def tss_create_delete():
"""
>>> tss_create_delete()
(True, False)
"""
cdef Py_tss_t tss_key
cdef bint after_create, after_delete
if PyThread_tss_create(&tss_key) != 0:
raise MemoryError()
after_create = PyThread_tss_is_created(&tss_key) != 0
assert after_create == PyThread_tss_is_created(pass_py_tss_t_ptr(&tss_key))
PyThread_tss_delete(&tss_key)
after_delete = PyThread_tss_is_created(&tss_key) != 0
return (after_create, after_delete)
def tss_alloc_free():
"""
>>> tss_alloc_free()
False
"""
cdef Py_tss_t *ptr_key
cdef bint after_alloc, after_free
ptr_key = PyThread_tss_alloc()
if ptr_key == NULL:
raise MemoryError()
after_alloc = PyThread_tss_is_created(ptr_key) != 0
PyThread_tss_free(ptr_key)
return after_alloc
def tss_alloc_create_delete_free():
"""
>>> tss_alloc_create_delete_free()
(False, True, False)
"""
cdef Py_tss_t *ptr_key
cdef bint after_alloc, after_free
ptr_key = PyThread_tss_alloc()
if ptr_key == NULL:
raise MemoryError()
after_alloc = PyThread_tss_is_created(ptr_key) != 0
if PyThread_tss_create(ptr_key) != 0:
raise MemoryError()
after_create = PyThread_tss_is_created(ptr_key) != 0
PyThread_tss_delete(ptr_key)
after_delete = PyThread_tss_is_created(ptr_key) != 0
PyThread_tss_free(ptr_key)
return (after_alloc, after_create, after_delete)
def tss_set_get():
"""
>>> tss_set_get()
1
"""
cdef Py_tss_t tss_key
cdef int the_value = 1
cdef int ret_value
if PyThread_tss_create(&tss_key) != 0:
raise MemoryError()
if PyThread_tss_get(&tss_key) == NULL:
PyThread_tss_set(&tss_key, <void *>&the_value)
ret_value = (<int *>PyThread_tss_get(&tss_key))[0]
PyThread_tss_delete(&tss_key)
return ret_value
|