From d2ead9eaaaf852b73d4519126ac284cbb65988e9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 23 Jul 2025 22:25:35 +0530 Subject: [PATCH] Terminate espeak on module free --- src/calibre/utils/tts/piper.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/calibre/utils/tts/piper.cpp b/src/calibre/utils/tts/piper.cpp index c44c3792aa..aa492ae76c 100644 --- a/src/calibre/utils/tts/piper.cpp +++ b/src/calibre/utils/tts/piper.cpp @@ -110,11 +110,21 @@ static PyModuleDef_Slot slots[] = { {Py_mod_exec, (void*)exec_module}, {0, NULL} static struct PyModuleDef module_def = {PyModuleDef_HEAD_INIT}; +static void +cleanup_module(void*) { + if (initialized) { + initialized = false; + voice_set = false; + espeak_Terminate(); + } +} + CALIBRE_MODINIT_FUNC PyInit_piper(void) { module_def.m_name = "piper"; module_def.m_slots = slots; module_def.m_doc = doc; module_def.m_methods = methods; + module_def.m_free = cleanup_module; return PyModuleDef_Init(&module_def); } // }}}