|
From: <ba...@us...> - 2008-11-05 23:31:17
|
Revision: 1148
http://omc.svn.sourceforge.net/omc/?rev=1148&view=rev
Author: bartw
Date: 2008-11-05 23:31:12 +0000 (Wed, 05 Nov 2008)
Log Message:
-----------
better handling of cmpi_pywbem_bindings import
Modified Paths:
--------------
cmpi-bindings/trunk/src/target_python.c
Modified: cmpi-bindings/trunk/src/target_python.c
===================================================================
--- cmpi-bindings/trunk/src/target_python.c 2008-11-05 19:45:32 UTC (rev 1147)
+++ cmpi-bindings/trunk/src/target_python.c 2008-11-05 23:31:12 UTC (rev 1148)
@@ -118,7 +118,6 @@
* Global Python initializer
*
* load the Python interpreter
- * import 'cmpi_pywbem_bindings' -> _TARGET_MODULE
* init threads
*/
@@ -143,27 +142,6 @@
cmpiMainPyThreadState = PyGILState_GetThisThreadState();
PyEval_ReleaseThread(cmpiMainPyThreadState);
- TARGET_THREAD_BEGIN_BLOCK;
-
- /*
- * import 'cmpi_pywbem_bindings'
- */
-
- _TARGET_MODULE = PyImport_ImportModule("cmpi_pywbem_bindings");
- if (_TARGET_MODULE == NULL)
- {
- TARGET_THREAD_END_BLOCK;
- _SBLIM_TRACE(1,("<%d/0x%x> Python: import cmpi_pywbem_bindings failed", getpid(), pthread_self()));
- CMPIString* trace = get_exc_trace(broker);
- _SBLIM_TRACE(1,("<%d/0x%x> %s", getpid(), pthread_self(),
- CMGetCharsPtr(trace, NULL)));
- _CMPI_SETFAIL(trace);
- abort();
- return -1;
- }
- _SBLIM_TRACE(1,("<%d/0x%x> Python: _TARGET_MODULE at %p", getpid(), pthread_self(), _TARGET_MODULE));
-
- TARGET_THREAD_END_BLOCK;
_SBLIM_TRACE(1,("<%d/0x%x> PyGlobalInitialize() succeeded", getpid(), pthread_self()));
return 0;
}
@@ -296,6 +274,7 @@
/*
+ * import 'cmpi_pywbem_bindings'
* local (per MI) Python initializer
* keeps track of reference count
*/
@@ -314,9 +293,9 @@
}
/* import 'cmpi_pywbem_bindings' */
rc = PyGlobalInitialize(hdl->broker, st);
- pthread_mutex_unlock(&_CMPI_INIT_MUTEX);
if (rc != 0)
{
+ pthread_mutex_unlock(&_CMPI_INIT_MUTEX);
return rc;
}
@@ -324,6 +303,29 @@
TARGET_THREAD_BEGIN_BLOCK;
+ /*
+ * import 'cmpi_pywbem_bindings'
+ */
+
+ if (_TARGET_MODULE == NULL)
+ {
+ _TARGET_MODULE = PyImport_ImportModule("cmpi_pywbem_bindings");
+ if (_TARGET_MODULE == NULL)
+ {
+ _SBLIM_TRACE(1,("<%d/0x%x> Python: import cmpi_pywbem_bindings failed", getpid(), pthread_self()));
+ CMPIString* trace = get_exc_trace(hdl->broker);
+ PyErr_Clear();
+ TARGET_THREAD_END_BLOCK;
+ _SBLIM_TRACE(1,("<%d/0x%x> %s", getpid(), pthread_self(),
+ CMGetCharsPtr(trace, NULL)));
+ _CMPI_SETFAIL(trace);
+ pthread_mutex_unlock(&_CMPI_INIT_MUTEX);
+ return -1;
+ }
+ }
+ pthread_mutex_unlock(&_CMPI_INIT_MUTEX);
+ _SBLIM_TRACE(1,("<%d/0x%x> Python: _TARGET_MODULE at %p", getpid(), pthread_self(), _TARGET_MODULE));
+
/* cmpi_pywbem_bindings::get_cmpi_proxy_provider */
PyObject *provclass = PyObject_GetAttrString(_TARGET_MODULE,
"get_cmpi_proxy_provider");
@@ -379,10 +381,10 @@
pthread_mutex_unlock(&_CMPI_INIT_MUTEX);
return;
}
-
+
TARGET_THREAD_BEGIN_BLOCK;
- Py_DecRef(_TARGET_MODULE);
- TARGET_THREAD_END_BLOCK;
+ Py_DecRef(_TARGET_MODULE);
+ TARGET_THREAD_END_BLOCK;
PyEval_AcquireLock();
PyThreadState_Swap(cmpiMainPyThreadState);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|