diff options
author | Bram Moolenaar <Bram@vim.org> | 2010-07-24 15:42:14 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2010-07-24 15:42:14 +0200 |
commit | 4c3a326c53c27f67f7ce8e1bbabc684c74a06634 (patch) | |
tree | ca1b71d592f347fbd3c7f7feb94a3e72e7201fd2 /src | |
parent | 2a7e2a62543126d75525d861c3417ac9bb209159 (diff) |
Temporary solution for crashing when using both :py and :py3: disallow both in
one session.
Diffstat (limited to 'src')
-rw-r--r-- | src/if_python.c | 18 | ||||
-rw-r--r-- | src/if_python3.c | 22 | ||||
-rw-r--r-- | src/proto/if_python.pro | 1 | ||||
-rw-r--r-- | src/proto/if_python3.pro | 1 |
4 files changed, 40 insertions, 2 deletions
diff --git a/src/if_python.c b/src/if_python.c index 8185fc136f..95be357245 100644 --- a/src/if_python.c +++ b/src/if_python.c @@ -343,6 +343,16 @@ python_runtime_link_init(char *libname, int verbose) { int i; +#if defined(UNIX) && defined(FEAT_PYTHON3) + /* Can't have Python and Python3 loaded at the same time, it may cause a + * crash. */ + if (python3_loaded()) + { + EMSG(_("E999: Python: Cannot use :py and :py3 in one session")); + return FAIL; + } +#endif + if (hinstPython) return OK; hinstPython = load_dll(libname); @@ -519,6 +529,14 @@ python_end() --recurse; } +#if (defined(DYNAMIC_PYTHON) && defined(FEAT_PYTHON3)) || defined(PROTO) + int +python_loaded() +{ + return (hinstPython != 0); +} +#endif + static int Python_Init(void) { diff --git a/src/if_python3.c b/src/if_python3.c index 238f968b3f..8958e0ae29 100644 --- a/src/if_python3.c +++ b/src/if_python3.c @@ -306,7 +306,7 @@ static struct */ static void end_dynamic_python3(void) { - if (hinstPy3) + if (hinstPy3 != 0) { close_dll(hinstPy3); hinstPy3 = 0; @@ -323,7 +323,17 @@ static int py3_runtime_link_init(char *libname, int verbose) int i; void *ucs_from_string, *ucs_from_string_and_size; - if (hinstPy3) +#if defined(UNIX) && defined(FEAT_PYTHON) + /* Can't have Python and Python3 loaded at the same time, it may cause a + * crash. */ + if (python_loaded()) + { + EMSG(_("E999: Python: Cannot use :py and :py3 in one session")); + return FAIL; + } +#endif + + if (hinstPy3 != 0) return OK; hinstPy3 = load_dll(libname); @@ -506,6 +516,14 @@ void python3_end() --recurse; } +#if (defined(DYNAMIC_PYTHON) && defined(FEAT_PYTHON)) || defined(PROTO) + int +python3_loaded() +{ + return (hinstPy3 != 0); +} +#endif + static int Python3_Init(void) { if (!py3initialised) diff --git a/src/proto/if_python.pro b/src/proto/if_python.pro index 793b6eeb5d..ec12402501 100644 --- a/src/proto/if_python.pro +++ b/src/proto/if_python.pro @@ -1,6 +1,7 @@ /* if_python.c */ int python_enabled __ARGS((int verbose)); void python_end __ARGS((void)); +int python_loaded __ARGS((void)); void ex_python __ARGS((exarg_T *eap)); void ex_pyfile __ARGS((exarg_T *eap)); void python_buffer_free __ARGS((buf_T *buf)); diff --git a/src/proto/if_python3.pro b/src/proto/if_python3.pro index f9921e1c9a..9c132c3dce 100644 --- a/src/proto/if_python3.pro +++ b/src/proto/if_python3.pro @@ -1,6 +1,7 @@ /* if_python3.c */ int python3_enabled __ARGS((int verbose)); void python3_end __ARGS((void)); +int python3_loaded __ARGS((void)); void ex_py3 __ARGS((exarg_T *eap)); void ex_py3file __ARGS((exarg_T *eap)); void python3_buffer_free __ARGS((buf_T *buf)); |