Browse Source

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.
pull/7862/head
Victor Stinner 8 years ago
committed by GitHub
parent
commit
209abf7469
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 9
      Lib/test/test_embed.py
  2. 2
      Misc/NEWS.d/next/C API/2018-06-21-15-29-59.bpo-33932.VSlXyS.rst
  3. 14
      Programs/_testembed.c
  4. 5
      Python/pylifecycle.c

9
Lib/test/test_embed.py

@ -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()

2
Misc/NEWS.d/next/C API/2018-06-21-15-29-59.bpo-33932.VSlXyS.rst

@ -0,0 +1,2 @@
Calling Py_Initialize() twice does nothing, instead of failing with a fatal
error: restore the Python 3.6 behaviour.

14
Programs/_testembed.c

@ -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 }
};

5
Python/pylifecycle.c

@ -892,6 +892,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…
Cancel
Save