From: <ba...@us...> - 2008-08-29 20:03:43
|
Revision: 891 http://omc.svn.sourceforge.net/omc/?rev=891&view=rev Author: bartw Date: 2008-08-29 20:03:53 +0000 (Fri, 29 Aug 2008) Log Message: ----------- working on concurrency issues Modified Paths: -------------- cmpi-bindings/trunk/src/cmpi_provider_python.c cmpi-bindings/trunk/swig/cmpi_types.i cmpi-bindings/trunk/swig/python/CMakeLists.txt Modified: cmpi-bindings/trunk/src/cmpi_provider_python.c =================================================================== --- cmpi-bindings/trunk/src/cmpi_provider_python.c 2008-08-29 17:43:11 UTC (rev 890) +++ cmpi-bindings/trunk/src/cmpi_provider_python.c 2008-08-29 20:03:53 UTC (rev 891) @@ -94,6 +94,7 @@ return str; } + static int PyInitialize(PyProviderMIHandle* hdl, CMPIStatus* st); #define PY_CMPI_INIT { if (((PyProviderMIHandle*)(self->hdl))->pyMod == NULL) if (PyInitialize(((PyProviderMIHandle*)(self->hdl)), &status) != 0) return status; } @@ -103,11 +104,14 @@ { Py_RETURN_NONE; } - PyObject* pl = PyList_New(0); + PyObject* pl; + //SWIG_PYTHON_THREAD_BEGIN_BLOCK; + pl = PyList_New(0); for (; *cplist != NULL; ++cplist) { PyList_Append(pl, PyString_FromString(*cplist)); } + //SWIG_PYTHON_THREAD_END_BLOCK; return pl; } @@ -129,6 +133,7 @@ PyObject *type, *value, *traceback; _SBLIM_TRACE(1, ("PyErr_Occurred() %d", PyErr_Occurred())); + //SWIG_PYTHON_THREAD_BEGIN_BLOCK; PyErr_Fetch(&type, &value, &traceback); _SBLIM_TRACE(1,("** type %p, value %p, traceback %p", type, value, traceback)); PyErr_Print(); @@ -188,6 +193,7 @@ cleanup: PyErr_Restore(type, value, traceback); + //SWIG_PYTHON_THREAD_END_BLOCK; if (rv == NULL) { @@ -217,6 +223,7 @@ PyObject *pyargs = NULL; PyObject *pyfunc = NULL; PyObject *prv = NULL; + //SWIG_PYTHON_THREAD_BEGIN_BLOCK; pyargs = PyTuple_New(nargs); pyfunc = PyObject_GetAttrString(hdl->pyMod, opname); if (pyfunc == NULL) @@ -310,6 +317,7 @@ Py_DecRef(pyargs); Py_DecRef(pyfunc); Py_DecRef(prv); + //SWIG_PYTHON_THREAD_END_BLOCK; return rc; } @@ -327,8 +335,11 @@ _SBLIM_TRACE(1,("Cleanup() called")); + //SWIG_PYTHON_THREAD_BEGIN_BLOCK; Py_DecRef(_PYPROVMOD); Py_Finalize(); + // TODO should release come before finalize? + //SWIG_PYTHON_THREAD_END_BLOCK; _SBLIM_TRACE(1,("Cleanup(Python) called")); if (miHdl != NULL) Modified: cmpi-bindings/trunk/swig/cmpi_types.i =================================================================== --- cmpi-bindings/trunk/swig/cmpi_types.i 2008-08-29 17:43:11 UTC (rev 890) +++ cmpi-bindings/trunk/swig/cmpi_types.i 2008-08-29 20:03:53 UTC (rev 891) @@ -626,9 +626,11 @@ #TODO memory leak alert (clone_data) PyObject* pydata = SWIG_NewPointerObj((void*) clone_data(&data), SWIGTYPE_p__CMPIData, 0); + SWIG_PYTHON_THREAD_BEGIN_BLOCK; PyObject* pl = PyTuple_New(2); PyTuple_SetItem(pl, 0, pydata); PyTuple_SetItem(pl, 1, PyString_FromString(CMGetCharPtr(s))); + SWIG_PYTHON_THREAD_END_BLOCK; return pl; #endif } @@ -722,9 +724,11 @@ #TODO memory leak alert (clone_data) PyObject* pydata = SWIG_NewPointerObj((void*) clone_data(&data), SWIGTYPE_p__CMPIData, 0); + SWIG_PYTHON_THREAD_BEGIN_BLOCK; PyObject* pl = PyTuple_New(2); PyTuple_SetItem(pl, 0, pydata); PyTuple_SetItem(pl, 1, PyString_FromString(CMGetCharPtr(s))); + SWIG_PYTHON_THREAD_END_BLOCK; return pl; #endif } Modified: cmpi-bindings/trunk/swig/python/CMakeLists.txt =================================================================== --- cmpi-bindings/trunk/swig/python/CMakeLists.txt 2008-08-29 17:43:11 UTC (rev 890) +++ cmpi-bindings/trunk/swig/python/CMakeLists.txt 2008-08-29 20:03:53 UTC (rev 891) @@ -23,7 +23,7 @@ ADD_CUSTOM_COMMAND ( OUTPUT ${SWIG_OUTPUT} COMMAND ${CMAKE_COMMAND} -E echo_append "Creating wrapper code for Python ..." - COMMAND ${SWIG_EXECUTABLE} -python -features autodoc -o ${SWIG_OUTPUT} -I${CMPI_INCLUDE_DIR} ${SWIG_INPUT} + COMMAND ${SWIG_EXECUTABLE} -python -threads -features autodoc -o ${SWIG_OUTPUT} -I${CMPI_INCLUDE_DIR} ${SWIG_INPUT} COMMAND ${CMAKE_COMMAND} -E echo "Done." WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../*.i @@ -57,4 +57,4 @@ # pycmpi_provider.py: provider implementation # INSTALL(FILES pycmpi_provider.py DESTINATION ${PYTHON_LIB_DIR}/site-packages ) -INSTALL(FILES Py_UnixProcessProvider.py DESTINATION /usr/lib/pycim ) +#INSTALL(FILES Py_UnixProcessProvider.py DESTINATION /usr/lib/pycim ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |