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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
30 additions and
0 deletions
-
Lib/test/test_embed.py
-
Misc/NEWS.d/next/C API/2018-06-21-15-29-59.bpo-33932.VSlXyS.rst
-
Programs/_testembed.c
-
Python/pylifecycle.c
|
|
|
@ -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 } |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
|