]> SALOME platform Git repositories - modules/kernel.git/blob - src/LifeCycleCORBA/Launchers.cxx
Salome HOME
PR: merge from branch BR_UnitTests tag mergeto_trunk_17oct05
[modules/kernel.git] / src / LifeCycleCORBA / Launchers.cxx
1 #include <Launchers.hxx>
2 #include "utilities.h"
3
4 using namespace std;
5
6 static int Launchers_IsLoaded = 0;
7 static PyObject * Launchers_module = 0;
8 static char * Launchers_name="Launchers";
9
10 PyThreadState *mainThreadState=0;
11
12 PyThreadState * getMainThreadState(){
13   PyInterpreterState *interp;
14   PyThreadState *p;
15   interp=PyInterpreterState_Head();
16   for (interp = PyInterpreterState_Head(); interp != NULL; ){
17     if(interp->next == NULL)break;
18     interp=interp->next;
19   }
20   for (p = interp->tstate_head; p != NULL; ){
21     if(p->next == NULL)break;
22     p=p->next;
23   }
24   return p;
25 }
26 PyThreadState *acquireMainThread(){
27     PyEval_AcquireLock();
28     return  PyThreadState_Swap(mainThreadState);
29 }
30 void releaseMainThread(PyThreadState *tstate){
31     PyThreadState_Swap(tstate);
32     PyEval_ReleaseLock();
33 }
34
35 void Launchers_assertInitialized() {
36   MESSAGE("===========================================================");
37   MESSAGE("Launchers_assertInitialized");
38   MESSAGE("===========================================================");
39    PyThreadState *_save; 
40    if( !Py_IsInitialized() ) {
41      MESSAGE("===========================================================");
42      MESSAGE("Py_Initialize()");
43      MESSAGE("===========================================================");
44          Py_Initialize();
45          PyEval_InitThreads();
46          PyEval_SaveThread();
47    }
48    if( !Launchers_IsLoaded ) {
49       mainThreadState=getMainThreadState();
50       _save=acquireMainThread();
51       Launchers_module=PyImport_ImportModule(Launchers_name);
52       if(!Launchers_module){
53         PyErr_Print();
54         return;
55       }
56       Py_INCREF(Launchers_module);
57       Launchers_IsLoaded = 1;
58       releaseMainThread(_save);
59    }
60 }
61
62 PyObject * getLauncher(char* arg0) {
63     PyObject *v;
64     PyThreadState *_save; 
65     Launchers_assertInitialized();
66     _save=acquireMainThread();
67     v=PyObject_CallMethod(Launchers_module,"getLauncher","s",arg0);
68     if(!v){
69       PyErr_Print();
70       return NULL;
71     }
72     releaseMainThread(_save);
73     Py_INCREF(v);
74     return v;
75 }
76
77 void Launcher_Slaunch(PyObject *self, char* arg1, char* arg2) {
78     PyObject *v;
79     PyThreadState *_save; 
80     Launchers_assertInitialized();
81     _save=acquireMainThread();
82     v=PyObject_CallMethod(self,"Slaunch","ss",arg1,arg2);
83     if(!v){
84       PyErr_Print();
85     }
86     releaseMainThread(_save);
87 }
88