You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I noticed that when PythonEngine.PythonHome was set and a subsequent Initialize() call was made my .Net application would close unexpectedly.
It looks like the call to Py_SetPythonHome made in runtime.cs is implicitly marshalling the string to a char array for the unmanaged code. My suspicion is that the Python sourcecode is keeping a record of the pointer rather than making a copy of the data. The managed runtime will free the memory allocated to char array as soon as the function finishes executing leaving a dangling pointer. This then leads to the unexpected Initialize() behaviour.
@leomeuk looks like you are correct - I tested this crash in csi:
Microsoft (R) Roslyn C# Compiler version 1.1.0.51204
Loading context from 'CSharpInteractive.rsp'.
Type "#help" for more information.
> #r "C:\Python\Python27\Lib\site-packages\Python.Runtime.dll"
> using Python.Runtime;
> PythonEngine.PythonHome = @"C:\Python\Python27";
> PythonEngine.Initialize();
> PythonEngine.PythonHome
Hosting process exited with exit code -1073740940.
Loading context from 'CSharpInteractive.rsp'.
I noticed that when
PythonEngine.PythonHome
was set and a subsequentInitialize()
call was made my .Net application would close unexpectedly.It looks like the call to
Py_SetPythonHome
made in runtime.cs is implicitly marshalling the string to a char array for the unmanaged code. My suspicion is that the Python sourcecode is keeping a record of the pointer rather than making a copy of the data. The managed runtime will free the memory allocated to char array as soon as the function finishes executing leaving a dangling pointer. This then leads to the unexpectedInitialize()
behaviour.The solution appears to be to explicitly marshal the string and hang onto the pointer until it is no longer needed, i.e.
Running Win7, .Net4.5 and Python 2.7.11.
The text was updated successfully, but these errors were encountered: