PyGILState_Release called twice in embedded application
Barry Scott
barry at barrys-emacs.org
Thu Mar 23 08:33:09 EDT 2023
> On 23 Mar 2023, at 08:46, Arnaud Loonstra <arnaud at sphaero.org> wrote:
>
> 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.
What 3rd party C extension are you running with?
I'd be surprised if the cpython code was the issue.
Barry
>
> 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
> --
> https://mail.python.org/mailman/listinfo/python-list
>
More information about the Python-list
mailing list