blob: 3560211498a6dc97f5c50d2ab1f12d5fb1392e39 (
plain)
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# mode: run
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
def test(int x):
"""
>>> test(5)
47
>>> test(11)
53
"""
with nogil:
f(x)
x = g(x)
return x
cdef void f(int x) nogil:
cdef int y
y = x + 42
g(y)
cdef int g(int x) nogil:
cdef int y
y = x + 42
return y
cdef void release_gil_in_nogil() nogil:
# This should generate valid code with/without the GIL
with nogil:
pass
cpdef void release_gil_in_nogil2() nogil:
# This should generate valid code with/without the GIL
with nogil:
pass
def test_release_gil_in_nogil():
"""
>>> test_release_gil_in_nogil()
"""
with nogil:
release_gil_in_nogil()
with nogil:
release_gil_in_nogil2()
release_gil_in_nogil()
release_gil_in_nogil2()
cdef void get_gil_in_nogil() nogil:
with gil:
pass
cpdef void get_gil_in_nogil2() nogil:
with gil:
pass
def test_get_gil_in_nogil():
"""
>>> test_get_gil_in_nogil()
"""
with nogil:
get_gil_in_nogil()
with nogil:
get_gil_in_nogil2()
get_gil_in_nogil()
get_gil_in_nogil2()
cdef int with_gil_func() except -1 with gil:
raise Exception("error!")
cdef int nogil_func() except -1 nogil:
with_gil_func()
def test_nogil_exception_propagation():
"""
>>> test_nogil_exception_propagation()
Traceback (most recent call last):
...
Exception: error!
"""
with nogil:
nogil_func()
cdef int write_unraisable() noexcept nogil:
with gil:
raise ValueError()
def test_unraisable():
"""
>>> print(test_unraisable()) # doctest: +ELLIPSIS
ValueError
Exception...ignored...
"""
import sys
old_stderr = sys.stderr
stderr = sys.stderr = StringIO()
try:
write_unraisable()
finally:
sys.stderr = old_stderr
return stderr.getvalue().strip()
|