bpo-33932: Calling Py_Initialize() twice does nothing (GH-7845)
Calling Py_Initialize() twice does nothing, instead of failing with a
fatal error: restore the Python 3.6 behaviour.
(cherry picked from commit 209abf7469
)
Co-authored-by: Victor Stinner <vstinner@redhat.com>
This commit is contained in:
parent
235d0fb93c
commit
b940921a67
|
@ -229,6 +229,15 @@ class EmbeddingTests(unittest.TestCase):
|
|||
self.assertEqual(out, '')
|
||||
self.assertEqual(err, '')
|
||||
|
||||
def test_initialize_twice(self):
|
||||
"""
|
||||
bpo-33932: Calling Py_Initialize() twice should do nothing (and not
|
||||
crash!).
|
||||
"""
|
||||
out, err = self.run_embedded_interpreter("initialize_twice")
|
||||
self.assertEqual(out, '')
|
||||
self.assertEqual(err, '')
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Calling Py_Initialize() twice does nothing, instead of failing with a fatal
|
||||
error: restore the Python 3.6 behaviour.
|
|
@ -263,6 +263,19 @@ static int test_bpo20891(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int test_initialize_twice(void)
|
||||
{
|
||||
_testembed_Py_Initialize();
|
||||
|
||||
/* bpo-33932: Calling Py_Initialize() twice should do nothing
|
||||
* (and not crash!). */
|
||||
Py_Initialize();
|
||||
|
||||
Py_Finalize();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* *********************************************************
|
||||
* List of test cases and the function that implements it.
|
||||
|
@ -288,6 +301,7 @@ static struct TestCase TestCases[] = {
|
|||
{ "pre_initialization_api", test_pre_initialization_api },
|
||||
{ "pre_initialization_sys_options", test_pre_initialization_sys_options },
|
||||
{ "bpo20891", test_bpo20891 },
|
||||
{ "initialize_twice", test_initialize_twice },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
|
|
@ -895,6 +895,11 @@ _Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *config)
|
|||
_PyInitError
|
||||
_Py_InitializeEx_Private(int install_sigs, int install_importlib)
|
||||
{
|
||||
if (_PyRuntime.initialized) {
|
||||
/* bpo-33932: Calling Py_Initialize() twice does nothing. */
|
||||
return _Py_INIT_OK();
|
||||
}
|
||||
|
||||
_PyCoreConfig config = _PyCoreConfig_INIT;
|
||||
_PyInitError err;
|
||||
|
||||
|
|
Loading…
Reference in New Issue