From 60a974076fd7fd49df930b18a212a117ea7d032c Mon Sep 17 00:00:00 2001 From: tkorvola Date: Tue, 7 Feb 2017 19:40:00 +0200 Subject: [PATCH] Plug more reference leaks. I hope I am getting it right. The Python C API is a bit messy regarding reference behaviour. Change-Id: I0e78b4f8e46eb387caf0d751f6bffac5f1b10c18 --- .../jnipython.dll | Bin 67584 -> 68096 bytes .../src/sclpy.c | 58 ++++++++++++------ 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/org.simantics.pythonlink.win32.x86_64/jnipython.dll b/org.simantics.pythonlink.win32.x86_64/jnipython.dll index c2f62cb7f5de3bbfa0d808fa900bb308711c0fab..7cc11fd3f764998be28d7d5c889260ff1499bb2d 100644 GIT binary patch delta 10927 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

n4RiXX#Nx>dyC3-9&Un1v_bIb)qFO_Wfq&c z>DE-dRC%#$XsMqdtUrwcE(Zw0Cdg^v7Xt-hE9A@Iacs^_zr2bdL8yhM5}YAV*O3=^ z4->2)TfkcfW8*_Mf&Yrq2wCU|Ta^2dFN5z4f$j`&z(4CG2nNVPXF*tw;stphA^kAAap@PKDcj~AVfkofmfi!K&}Ko77ja0_KN$^8T&Ix$ZW=AmLqL`Q=V0LkFj zP!>aO1kX#tiHB?l4@?$>Qpl0uAET^?TnSz|7;_A{7JQ40PDu~GXc$s7WIOm6D|C>v z!9Pq9gc`_O^B}yE3P)7z-~)$aS|O)_iz6_#kiEc{kHQi_7Dgj*lt#$2!3Sqz3CJG2 zdJNjn0tt0P$EeWo-`gaLwfKN zC>GL#51D`^AU*gAlr++V56Q+7kRJR;lx)b2;Ik%T2_WZ#U!98JNk0|qe`PwBfGXfC zks$LSuLsYZi6wxX4gP;9cF0~htW_wbkZZx8odsLS`QRO&#S%b{1V4ka74l{9*Pg=? zK(>PqeI82yISu?aO3m3k0ig&&%Q*lD22LBGl0$IQlqXRuFAtUbyD^aYFOTq8FAqW|ee+7@o!|BgQB@+Bulmn1w zgYQEMI1RZ5d>&H4w~&c1NBIk~9lQp`tybm2D$EXKJNS7NGvxc=TX1(wf=n4l+5!yt gn!w{wW<&NRVI<1us8C{AfYPoO>11ZJckcTBKh^c(<^TWy delta 10717 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 diff --git a/org.simantics.pythonlink.win32.x86_64/src/sclpy.c b/org.simantics.pythonlink.win32.x86_64/src/sclpy.c index caed56d..762df28 100644 --- a/org.simantics.pythonlink.win32.x86_64/src/sclpy.c +++ b/org.simantics.pythonlink.win32.x86_64/src/sclpy.c @@ -32,6 +32,7 @@ jint throwIllegalArgumentException( JNIEnv *env, const char *message ) { return throwException( env, ILLEGAL_ARGUMENT_EXCEPTION, message ); } +// Returns a borrowed reference. PyObject* getModule(jlong contextID) { return PyState_FindModule((PyModuleDef*) contextID); // return PyImport_AddModule("__main__"); @@ -105,19 +106,27 @@ static PyMethodDef sclWriterMethods[] = { {NULL, NULL, 0, NULL} }; -JNIEXPORT void JNICALL Java_org_simantics_pythonlink_PythonContext_initializePython(JNIEnv *env, jobject thisObj, jobject writer) { +JNIEXPORT void JNICALL +Java_org_simantics_pythonlink_PythonContext_initializePython( + JNIEnv *env, jobject thisObj, jobject writer) { Py_Initialize(); { - static struct PyModuleDef moduledef = { PyModuleDef_HEAD_INIT, "sclwriter", NULL, -1, sclWriterMethods, }; - PyObject *m = PyModule_Create(&moduledef); + static struct PyModuleDef moduledef = { + PyModuleDef_HEAD_INIT, "sclwriter", NULL, -1, sclWriterMethods + }; + PyObject *m = PyModule_Create(&moduledef); sclWriter = (*env)->NewGlobalRef(env, writer); - if (m == NULL) throwException(env, PYTHON_EXCEPTION, "Failed to create SCL writer module"); - - PySys_SetObject("stdout", m); - PySys_SetObject("stderr", m); + if (m == NULL) { + throwException(env, PYTHON_EXCEPTION, + "Failed to create SCL writer module"); + } else { + PySys_SetObject("stdout", m); + PySys_SetObject("stderr", m); + Py_DECREF(m); + } } hasNumpy = _import_array(); @@ -145,12 +154,11 @@ JNIEXPORT jlong JNICALL Java_org_simantics_pythonlink_PythonContext_createContex modDef->m_size = -1; module = PyModule_Create(modDef); - Py_INCREF(module); PyState_AddModule(module, modDef); - { PyObject *builtin = PyImport_AddModule("builtins"); PyObject *dict = PyModule_GetDict(module); + Py_DECREF(module); PyDict_SetItemString(dict, "__builtin__", builtin); PyDict_SetItemString(dict, "__builtins__", builtin); @@ -160,12 +168,11 @@ JNIEXPORT jlong JNICALL Java_org_simantics_pythonlink_PythonContext_createContex } } -JNIEXPORT void JNICALL Java_org_simantics_pythonlink_PythonContext_deleteContextImpl(JNIEnv *env, jobject thisObj, jlong contextID) { +JNIEXPORT void JNICALL +Java_org_simantics_pythonlink_PythonContext_deleteContextImpl( + JNIEnv *env, jobject thisObj, jlong contextID) { PyModuleDef *modDef = (PyModuleDef*)contextID; - PyObject *module; PyEval_RestoreThread(main_ts); - module = PyState_FindModule(modDef); - Py_XDECREF(module); PyState_RemoveModule(modDef); free((char*)modDef->m_name); free(modDef); @@ -204,6 +211,7 @@ PyObject *getPythonStringList(JNIEnv *env, jobjectArray value) { PyList_SetItem(result, i, getPythonString(env, (jstring)item)); } else { + Py_INCREF(Py_None); PyList_SetItem(result, i, Py_None); } } @@ -416,8 +424,12 @@ PyObject *getPythonRecordObject(JNIEnv *env, jobject object, jobject binding) { jobject componentObject = (*env)->CallObjectMethod(env, binding, getComponent, object, i); jobject componentBinding = (*env)->CallObjectMethod(env, binding, getComponentBinding, i); - PyObject *item = getPythonObject(env, componentObject, componentBinding); - PyDict_SetItem(result, getPythonString(env, fieldName), item); + PyObject + *key = getPythonString(env, fieldName), + *item = getPythonObject(env, componentObject, componentBinding); + PyDict_SetItem(result, key, item); + Py_DECREF(key); + Py_DECREF(item); } return result; @@ -440,8 +452,10 @@ PyObject *getPythonArrayObject(JNIEnv *env, jobject object, jobject binding) { jobject item = (*env)->CallObjectMethod(env, binding, getMethod, object, i); if (item != NULL) PyList_SetItem(result, i, getPythonObject(env, item, componentBinding)); - else + else { + Py_INCREF(Py_None); PyList_SetItem(result, i, Py_None); + } } return result; @@ -470,7 +484,12 @@ PyObject *getPythonMapObject(JNIEnv *env, jobject object, jobject binding) { for (i = 0; i < size; i++) { jobject key = (*env)->GetObjectArrayElement(env, keys, i); jobject item = (*env)->GetObjectArrayElement(env, values, i); - PyDict_SetItem(result, getPythonObject(env, key, keyBinding), getPythonObject(env, item, valueBinding)); + PyObject + *pkey = getPythonObject(env, key, keyBinding), + *pitem = getPythonObject(env, item, valueBinding); + PyDict_SetItem(result, pkey, pitem); + Py_DECREF(pkey); + Py_DECREF(pitem); } (*env)->DeleteLocalRef(env, keys); @@ -601,6 +620,7 @@ PyObject *getPythonObject(JNIEnv *env, jobject value, jobject binding) { } } +// Steals refs to name & value. void setPythonVariable(PyObject *module, PyObject *name, PyObject *value) { if (name && value) { PyDict_SetItem(PyModule_GetDict(module), name, value); @@ -1013,8 +1033,8 @@ Java_org_simantics_pythonlink_PythonContext_executePythonStatementImpl( { PyObject *result = PyRun_String(utfchars, Py_file_input, globals, globals); - PyObject *exceptionType = PyErr_Occurred(); + if (exceptionType != NULL) { PyObject *exception, *traceback, *message; PyErr_Fetch(&exceptionType, &exception, &traceback); @@ -1055,7 +1075,7 @@ Java_org_simantics_pythonlink_PythonContext_executePythonStatementImpl( // Returns a borrowed reference. static PyObject *getPythonValue( JNIEnv *env, jlong contextID, jstring variableName) { - PyObject *module = getModule(contextID); + PyObject *module = getModule(contextID); PyObject *pythonName = getPythonString(env, variableName); PyObject *value = PyDict_GetItem(PyModule_GetDict(module), pythonName); -- 2.45.1