-
Notifications
You must be signed in to change notification settings - Fork 748
Incorrect marshalling of string in Py_SetPythonHome #179
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
@leomeuk looks like you are correct - I tested this crash in
|
@leomeuk can you submit a patch and corresponding unit test? |
@denfromufa I'll look at doing so this weekend. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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: