#1360: Leak of SWIG var link object

This commit is contained in:
Andrew Rogers 2018-11-23 16:02:46 +00:00
commit 65edf2258f
3 changed files with 24 additions and 4 deletions

View file

@ -3320,11 +3320,21 @@ public:
getf = NewWrapper();
setf = NewWrapper();
Printf(f_init, "\t globals = SWIG_globals();\n");
Printf(f_init, "\t if (!globals) {\n");
Printf(f_init, " PyErr_SetString(PyExc_TypeError, \"Failure to create SWIG globals.\");\n");
Printf(f_init, "#if PY_VERSION_HEX >= 0x03000000\n");
Printf(f_init, "\t return NULL;\n");
Printf(f_init, "#else\n");
Printf(f_init, "\t return;\n");
Printf(f_init, "#endif\n");
Printf(f_init, "\t }\n");
/* If this is our first call, add the globals variable to the
Python dictionary. */
if (!have_globals) {
Printf(f_init, "\t PyDict_SetItemString(md, \"%s\", SWIG_globals());\n", global_name);
Printf(f_init, "\t PyDict_SetItemString(md, \"%s\", globals);\n", global_name);
if (builtin)
Printf(f_init, "\t SwigPyBuiltin_AddPublicSymbol(public_interface, \"%s\");\n", global_name);
have_globals = 1;
@ -3412,11 +3422,12 @@ public:
Wrapper_print(getf, f_wrappers);
/* Now add this to the variable linking mechanism */
Printf(f_init, "\t SWIG_addvarlink(SWIG_globals(), \"%s\", %s, %s);\n", iname, vargetname, varsetname);
Printf(f_init, "\t SWIG_addvarlink(globals,\"%s\",%s, %s);\n", iname, vargetname, varsetname);
if (builtin && shadow && !assignable && !in_class) {
Printf(f_init, "\t PyDict_SetItemString(md, \"%s\", PyObject_GetAttrString(SWIG_globals(), \"%s\"));\n", iname, iname);
Printf(f_init, "\t SwigPyBuiltin_AddPublicSymbol(public_interface, \"%s\");\n", iname);
}
Printf(f_init, "\t Py_DECREF(globals);\n");
Delete(vargetname);
Delete(varsetname);
Delete(getname);