diff options
author | robot-piglet <robot-piglet@yandex-team.com> | 2023-10-03 15:02:38 +0300 |
---|---|---|
committer | robot-piglet <robot-piglet@yandex-team.com> | 2023-10-03 16:04:35 +0300 |
commit | 5478b8f55cc7055a4861c4030e0c401b5c72714c (patch) | |
tree | 3d003e5b4c1800297fcc491faffc9a006d174289 /library/cpp/pybind/module.cpp | |
parent | ca778ad9bfb31839b0f05a4995753bc61db648ad (diff) | |
download | ydb-5478b8f55cc7055a4861c4030e0c401b5c72714c.tar.gz |
Intermediate changes
Diffstat (limited to 'library/cpp/pybind/module.cpp')
-rw-r--r-- | library/cpp/pybind/module.cpp | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/library/cpp/pybind/module.cpp b/library/cpp/pybind/module.cpp deleted file mode 100644 index b7b003d3b08..00000000000 --- a/library/cpp/pybind/module.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include "module.h" -#include "ptr.h" - -#include <util/generic/adaptor.h> - -namespace NPyBind { - -#if PY_MAJOR_VERSION >= 3 - namespace NPrivate { - struct TFinCallBacksHolder { - static TVector<TFinalizationCallBack>& GetCallBacks() { - static TVector<TFinalizationCallBack> res; - return res; - } - }; - - TAtExitRegistrar::TAtExitRegistrar(TPyObjectPtr module) { - TPyObjectPtr atExitModuleName(Py_BuildValue("s", "atexit"), true); - TPyObjectPtr atExitModule(PyImport_Import(atExitModuleName.Get())); - Y_VERIFY(atExitModule); - TPyObjectPtr finalizerFunc(PyObject_GetAttrString(module.Get(), "finalizer"), true); - Y_VERIFY(finalizerFunc); - TPyObjectPtr registerName(Py_BuildValue("s", "register"), true); - PyObject_CallMethodObjArgs(atExitModule.Get(), registerName.Get(), finalizerFunc.Get(), nullptr); - } - - TPyBindModuleRegistrar::TPyBindModuleRegistrar() { - TPyObjectPtr modules(PySys_GetObject("modules")); - Y_ENSURE(modules.Get()); - if (Module = NPrivate::CreatePyBindModule()) { - Y_VERIFY(0 == PyDict_SetItemString(modules.Get(), "pybind", Module.RefGet())); - } - AddFinalizationCallBack([this]() { - auto ptr = Module; - Y_UNUSED(ptr); - TPyObjectPtr modules(PySys_GetObject("modules")); - Y_ENSURE(modules.Get()); - TPyObjectPtr pyBindName(Py_BuildValue("s", "pybind")); - if (PyDict_Contains(modules.Get(), pyBindName.Get()) == 1) { - Y_VERIFY(0==PyDict_DelItemString(modules.Get(), "pybind")); - } - if (Module) { - //We have to untrack the module because some refs from him refers to gc-leaked errors - //see exceptions.cpp fore more info - PyObject_GC_UnTrack(Module.Get()); - Module.Drop(); - } - }); - } - - void AddFinalizationCallBack(TFinalizationCallBack callback) { - TFinCallBacksHolder::GetCallBacks().push_back(callback); - } - - int FinalizeAll() { - for (auto callback: Reversed(NPrivate::TFinCallBacksHolder::GetCallBacks())) { - callback(); - } - return 0; - } - } -#endif - - - TModuleHolder::TModuleHolder() - : Methods(1, new TVector<TMethodDef>) - { -#if PY_MAJOR_VERSION >= 3 - AddModuleMethod<TModuleMethodCaller<decltype(&NPrivate::FinalizeAll), &NPrivate::FinalizeAll>::Call>("finalizer"); -#endif - } -}//NPyBind |