PyGILState_Release called twice in embedded application
Arnaud Loonstra
arnaud at sphaero.org
Thu Mar 23 04:46:50 EDT 2023
Hi all,
I'm running in a crash due to a ResourceWarning (some socket is not
closed in a used module) after calling PyGILState_Release.
I'm running Python in a native thread (so a thread created by C not
Python). I'm acquiring the GIL through PyGILState_Ensure before doing
any CPYthon calls and releasing when finished using PyGILState_Release.
This has worked fine. But now I'm using a python module (openai) which
doesn't close its socket correctly which results in a ResourceWarning
which triggers an assert.
In the backtrace (below) I can see PyGILState_Release is called again.
(7) while I've already called it (126).
I can make the crash go away by adding
import warnings
warnings.simplefilter("ignore", ResourceWarning)
to my python code. But I'd rather prevent this from happening in the
first place.
Any suggestion very welcomed cause I'm puzzled.
Rg,
Arnaud
1 __pthread_kill_implementation pthread_kill.c 44
0x7ffff6fcaccc
2 __pthread_kill_internal pthread_kill.c 78
0x7ffff6fcad2f
3 __GI_raise raise.c 26
0x7ffff6f7bef2
4 __GI_abort abort.c 79
0x7ffff6f66472
5 __assert_fail_base assert.c 92
0x7ffff6f66395
6 __GI___assert_fail assert.c 101
0x7ffff6f74df2
7 PyGILState_Release pystate.c 1742
0x7ffff7abcf9f
8 tracemalloc_raw_alloc _tracemalloc.c 779
0x7ffff7afa803
9 tracemalloc_raw_malloc _tracemalloc.c 789
0x7ffff7afa844
10 PyMem_RawMalloc obmalloc.c 586
0x7ffff79dab8d
11 decode_current_locale fileutils.c 472
0x7ffff7ada4ab
12 _Py_DecodeLocaleEx fileutils.c 598
0x7ffff7adafce
13 unicode_decode_locale unicodeobject.c 3970
0x7ffff7a13b65
14 PyUnicode_DecodeLocale unicodeobject.c 4012
0x7ffff7a18c79
15 PyErr_SetFromErrnoWithFilenameObjects errors.c 772
0x7ffff7a94178
16 PyErr_SetFromErrnoWithFilenameObject errors.c 750
0x7ffff7a942ce
17 posix_path_object_error posixmodule.c 1709
0x7ffff7ae4201
18 path_object_error posixmodule.c 1719
0x7ffff7ae420f
19 path_error posixmodule.c 1737
0x7ffff7ae4221
20 posix_do_stat posixmodule.c 2565
0x7ffff7af42f7
21 os_stat_impl posixmodule.c 2897
0x7ffff7af4491
22 os_stat posixmodule.c.h 71
0x7ffff7af45e5
23 cfunction_vectorcall_FASTCALL_KEYWORDS methodobject.c 443
0x7ffff79d2ece
24 _PyObject_VectorcallTstate pycore_call.h 92
0x7ffff798b579
25 PyObject_Vectorcall call.c 299
0x7ffff798b65e
26 _PyEval_EvalFrameDefault ceval.c 4772
0x7ffff7a75453
27 _PyEval_EvalFrame pycore_ceval.h 73
0x7ffff7a79887
28 _PyEval_Vector ceval.c 6435
0x7ffff7a799b1
29 _PyFunction_Vectorcall call.c 393
0x7ffff798b215
30 _PyObject_VectorcallTstate pycore_call.h 92
0x7ffff798b579
31 PyObject_CallOneArg call.c 376
0x7ffff798b6cd
32 call_show_warning _warnings.c 609
0x7ffff7a31d24
33 warn_explicit _warnings.c 746
0x7ffff7a3223b
34 do_warn _warnings.c 947
0x7ffff7a3236f
35 warn_unicode _warnings.c 1106
0x7ffff7a32414
36 _PyErr_WarnFormatV _warnings.c 1126
0x7ffff7a32481
37 PyErr_ResourceWarning _warnings.c 1177
0x7ffff7a32d38
38 sock_finalize socketmodule.c 5073
0x7ffff6840cf3
39 PyObject_CallFinalizer object.c 208
0x7ffff79d6449
40 PyObject_CallFinalizerFromDealloc object.c 226
0x7ffff79d75ac
41 subtype_dealloc typeobject.c 1382
0x7ffff79ecf81
42 _Py_Dealloc object.c 2390
0x7ffff79d6c38
43 Py_DECREF object.h 527
0x7ffff79c116e
44 Py_XDECREF object.h 602
0x7ffff79c118d
45 free_keys_object dictobject.c 664
0x7ffff79c120a
46 dictkeys_decref dictobject.c 324
0x7ffff79c130f
47 dict_dealloc dictobject.c 2378
0x7ffff79c2eeb
48 _Py_Dealloc object.c 2390
0x7ffff79d6c38
49 Py_DECREF object.h 527
0x7ffff79eb06b
50 subtype_dealloc typeobject.c 1438
0x7ffff79ed138
51 _Py_Dealloc object.c 2390
0x7ffff79d6c38
52 Py_DECREF object.h 527
0x7ffff7affa77
53 deque_clear _collectionsmodule.c 625
0x7ffff7b01e10
54 deque_dealloc _collectionsmodule.c 1311
0x7ffff7b030d9
55 _Py_Dealloc object.c 2390
0x7ffff79d6c38
56 Py_DECREF object.h 527
0x7ffff79c116e
57 Py_XDECREF object.h 602
0x7ffff79c118d
58 _PyObject_FreeInstanceAttributes dictobject.c 5583
0x7ffff79ca68a
59 subtype_dealloc typeobject.c 1442
0x7ffff79ed18d
60 _Py_Dealloc object.c 2390
0x7ffff79d6c38
61 Py_DECREF object.h 527
0x7ffff79c116e
62 Py_XDECREF object.h 602
0x7ffff79c118d
63 _PyObject_FreeInstanceAttributes dictobject.c 5583
0x7ffff79ca68a
64 subtype_dealloc typeobject.c 1442
0x7ffff79ed18d
65 _Py_Dealloc object.c 2390
0x7ffff79d6c38
66 Py_DECREF object.h 527
0x7ffff79c116e
67 Py_XDECREF object.h 602
0x7ffff79c118d
68 free_keys_object dictobject.c 672
0x7ffff79c127f
69 dictkeys_decref dictobject.c 324
0x7ffff79c130f
70 dict_dealloc dictobject.c 2378
0x7ffff79c2eeb
71 odict_dealloc odictobject.c 1364
0x7ffff79ccc8c
72 _Py_Dealloc object.c 2390
0x7ffff79d6c38
73 Py_DECREF object.h 527
0x7ffff79c116e
74 Py_XDECREF object.h 602
0x7ffff79c118d
75 _PyObject_FreeInstanceAttributes dictobject.c 5583
0x7ffff79ca68a
76 subtype_dealloc typeobject.c 1442
0x7ffff79ed18d
77 _Py_Dealloc object.c 2390
0x7ffff79d6c38
78 Py_DECREF object.h 527
0x7ffff79c116e
79 Py_XDECREF object.h 602
0x7ffff79c118d
80 _PyObject_FreeInstanceAttributes dictobject.c 5583
0x7ffff79ca68a
81 subtype_dealloc typeobject.c 1442
0x7ffff79ed18d
82 _Py_Dealloc object.c 2390
0x7ffff79d6c38
83 Py_DECREF object.h 527
0x7ffff79c116e
84 Py_XDECREF object.h 602
0x7ffff79c118d
85 _PyObject_FreeInstanceAttributes dictobject.c 5583
0x7ffff79ca68a
86 subtype_dealloc typeobject.c 1442
0x7ffff79ed18d
87 _Py_Dealloc object.c 2390
0x7ffff79d6c38
88 Py_DECREF object.h 527
0x7ffff79c116e
89 Py_XDECREF object.h 602
0x7ffff79c118d
90 free_keys_object dictobject.c 664
0x7ffff79c120a
91 dictkeys_decref dictobject.c 324
0x7ffff79c130f
92 dict_dealloc dictobject.c 2378
0x7ffff79c2eeb
93 odict_dealloc odictobject.c 1364
0x7ffff79ccc8c
94 _Py_Dealloc object.c 2390
0x7ffff79d6c38
95 Py_DECREF object.h 527
0x7ffff79c116e
96 Py_XDECREF object.h 602
0x7ffff79c118d
97 _PyObject_FreeInstanceAttributes dictobject.c 5583
0x7ffff79ca68a
98 subtype_dealloc typeobject.c 1442
0x7ffff79ed18d
99 _Py_Dealloc object.c 2390
0x7ffff79d6c38
100 Py_DECREF object.h 527
0x7ffff79c116e
101 Py_XDECREF object.h 602
0x7ffff79c118d
102 free_keys_object dictobject.c 664
0x7ffff79c120a
103 dictkeys_decref dictobject.c 324
0x7ffff79c130f
104 dict_dealloc dictobject.c 2378
0x7ffff79c2eeb
105 _Py_Dealloc object.c 2390
0x7ffff79d6c38
106 Py_DECREF object.h 527
0x7ffff79c116e
107 delitem_common dictobject.c 1986
0x7ffff79c4deb
108 _PyDict_DelItem_KnownHash dictobject.c 2028
0x7ffff79c6c8b
109 PyDict_DelItem dictobject.c 2003
0x7ffff79c6d3a
110 _localdummy_destroyed _threadmodule.c 1044
0x7ffff7b31a85
111 cfunction_vectorcall_O methodobject.c 514
0x7ffff79d30f5
112 _PyObject_VectorcallTstate pycore_call.h 92
0x7ffff798b579
113 PyObject_CallOneArg call.c 376
0x7ffff798b6cd
114 handle_callback weakrefobject.c 931
0x7ffff7a300ab
115 PyObject_ClearWeakRefs weakrefobject.c 977
0x7ffff7a305cd
116 localdummy_dealloc _threadmodule.c 673
0x7ffff7b31f18
117 _Py_Dealloc object.c 2390
0x7ffff79d6c38
118 Py_DECREF object.h 527
0x7ffff79c116e
119 Py_XDECREF object.h 602
0x7ffff79c118d
120 free_keys_object dictobject.c 664
0x7ffff79c120a
121 dictkeys_decref dictobject.c 324
0x7ffff79c130f
122 dict_dealloc dictobject.c 2378
0x7ffff79c2eeb
123 _Py_Dealloc object.c 2390
0x7ffff79d6c38
124 Py_DECREF object.h 527
0x7ffff7aba1c9
125 PyThreadState_Clear pystate.c 1029
0x7ffff7abc790
126 PyGILState_Release pystate.c 1743
0x7ffff7abcef3
127 pythonactor_socket pythonactor.c 1021
0x555555709488
128 pythonactor_handle_msg pythonactor.c 1113
0x5555557098a5
129 pythonactor_handler pythonactor.c 1077
0x555555709716
130 sphactor_actor_run_once sphactor_actor.c 965
0x55555599bdfa
131 sphactor_actor_run sphactor_actor.c 1052
0x55555599c1c0
132 s_thread_shim zactor.c 68
0x5555559a97de
133 start_thread pthread_create.c 442
0x7ffff6fc8fd4
134 clone3 clone3.S 81
0x7ffff704966c
More information about the Python-list
mailing list