cdebug << pthread_self() << "/" << ThreadNo()
<< "RunningAction pthread_cond_broadcast _RunningWait "
<< Name() << endl ;
+// That activate the pthread_cond_wait for RunninWait
if ( pthread_cond_broadcast( &_RunningWait ) ) {
perror("Running pthread_cond_broadcast ") ;
}
exit( 0 ) ;
}
if ( !_ThreadStartedSync ) {
- cdebug << "pthread_cond " << Name() << " ThreadStarted pthread_cond_wait"
+ cdebug << pthread_self() << "/" << ThreadNo()
+ << "pthread_cond " << Name() << " ThreadStarted pthread_cond_wait"
<< endl ;
_ThreadStartedSync = true ;
if ( pthread_cond_wait( &_ThreadStartedWait , &_MutexWait ) ) {
perror("ThreadStarted pthread_cond_wait ") ;
}
- cdebug << "pthread_cond " << Name() << " ThreadStarted pthread_cond_waited"
+ cdebug << pthread_self() << "/" << ThreadNo()
+ << "pthread_cond " << Name() << " ThreadStarted pthread_cond_waited"
<< endl ;
}
else {
- cdebug << "pthread_cond " << Name() << " NO ThreadStarted pthread_cond_wait"
+ cdebug << pthread_self() << "/" << ThreadNo()
+ << "pthread_cond " << Name() << " NO ThreadStarted pthread_cond_wait"
<< endl ;
//Debug :
_ThreadStartedSync = false ;
perror("ThreadStart pthread_cond_signal ") ;
}
//Debug
- cdebug << "pthread_cond " << Name() << " NO ThreadStarted pthread_cond_signaled"
+ cdebug << pthread_self() << "/" << ThreadNo()
+ << "pthread_cond " << Name() << " NO ThreadStarted pthread_cond_signaled"
<< endl ;
}
if ( pthread_mutex_unlock( &_MutexWait ) ) {
exit( 0 ) ;
}
if ( _ThreadStartedSync ) {
- cdebug << "pthread_cond " << Name() << " ThreadStart pthread_cond_signal"
+ cdebug << pthread_self() << "/" << ThreadNo()
+ << "pthread_cond " << Name() << " ThreadStart pthread_cond_signal"
<< endl ;
_ThreadStartedSync = false ;
if ( pthread_cond_signal( &_ThreadStartedWait ) ) {
perror("ThreadStart pthread_cond_broadcast ") ;
}
- cdebug << "pthread_cond " << Name() << " ThreadStart pthread_cond_signaled"
+ cdebug << pthread_self() << "/" << ThreadNo()
+ << "pthread_cond " << Name() << " ThreadStart pthread_cond_signaled"
<< endl ;
}
else {
- cdebug << "pthread_cond " << Name() << " NO ThreadStart pthread_cond_signal"
+ cdebug << pthread_self() << "/" << ThreadNo()
+ << "pthread_cond " << Name() << " NO ThreadStart pthread_cond_signal"
<< endl ;
_ThreadStartedSync = true ;
//Debug :
perror("ThreadStarted pthread_cond_wait ") ;
}
//Debug
- cdebug << "pthread_cond " << Name() << " NO ThreadStart pthread_cond_waited"
+ cdebug << pthread_self() << "/" << ThreadNo()
+ << "pthread_cond " << Name() << " NO ThreadStart pthread_cond_waited"
<< endl ;
}
if ( pthread_mutex_unlock( &_MutexWait ) ) {
}
void GraphExecutor::InNode::coutbegin() {
- cdebug << ThreadNo() << " " << pthread_self() << " run_function begin"
+ cdebug << pthread_self() << "/" << ThreadNo() << " run_function begin"
<< " " << Name() << " " << Automaton()->StateName( State() ) << endl ;
}
void GraphExecutor::InNode::coutexit() {
int GraphExecutor::InNode::ExecuteAction() {
int sts ;
-// const char * nextactionname = Automaton()->ActionName( _NextAction ) ;
-// const char * statename = Automaton()->StateName( State() ) ;
-// const char * nextstatename = Automaton()->StateName( _NextState ) ;
-// cdebug << pthread_self() << "/" << ThreadNo() << " --> ExecuteAction "
-// << nextactionname << " " << statename << " NextState "
-// << nextstatename << endl ;
+ const char * nextactionname = Automaton()->ActionName( _NextAction ) ;
+ const char * statename = Automaton()->StateName( State() ) ;
+ const char * nextstatename = Automaton()->StateName( _NextState ) ;
+ cdebug_in << pthread_self() << "/" << ThreadNo() << " --> ExecuteAction "
+ << nextactionname << " " << statename << " NextState "
+ << nextstatename << endl ;
State( _NextState ) ;
switch ( _NextAction ) {
return 0 ;
}
}
-// cdebug << pthread_self() << "/" << ThreadNo() << "<-- ExecuteAction "
-// << Automaton()->ActionName( nextaction ) << endl ;
+ cdebug_out << pthread_self() << "/" << ThreadNo() << "<-- ExecuteAction "
+ << nextactionname << endl ;
return sts ;
}
unsigned int k;
int InReady = 0 ;
int res = 1;
- bool LoopFinished = false ;
bool LoopBeginning = false ;
+ bool LoopFinished = false ;
bool SwitchFinished = false ;
- if ( IsEndLoopNode() && !GetChangeNodeInLoop()->GetOutPort()->BoolValue() ) {
- LoopFinished = true ; // End of Loop
+ if ( IsLoopNode() ) {
+ GraphBase::OutPort * anOutLoopPort = GetChangeNodeInLoop()->GetOutPort() ;
+ if ( anOutLoopPort && anOutLoopPort->BoolValue() ) {
+ LoopBeginning = true ; // Beginning of Loop
+ }
}
- if ( IsLoopNode() && GetChangeNodeInLoop()->GetOutPort()->BoolValue() ) {
- LoopBeginning = true ; // Beginning of Loop
+ if ( IsEndLoopNode() ) {
+ GraphBase::OutPort * anOutLoopPort = GetChangeNodeInLoop()->GetOutPort() ;
+ if ( anOutLoopPort && !anOutLoopPort->BoolValue() ) {
+ LoopFinished = true ; // End of Loop
+ }
}
- if ( IsEndSwitchNode() && !GetChangeNodeInGate()->GetOutPort()->BoolValue() ) {
- SwitchFinished = true ; // End of Switch
+ if ( IsEndSwitchNode() ) {
+ GraphBase::OutPort * anOutGateSwitchPort = GetChangeNodeInGate()->GetOutPort() ;
+ if ( anOutGateSwitchPort && !anOutGateSwitchPort->BoolValue() ) {
+ SwitchFinished = true ; // End of Switch
+ }
}
cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " LoopFinished " << LoopFinished
<< " LoopBeginning " << LoopBeginning << " SwitchFinished " << SwitchFinished << endl ;
for ( k = 0 ; k < (unsigned int ) GetNodeInPortsSize() ; k++ ) {
GraphBase::InPort * anInPort = GetChangeNodeInPort(k) ;
GraphBase::OutPort * anOutPort = anInPort->GetOutPort() ;
- cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " InPort " << anInPort->PortName() << endl ;
+ cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " InPort " << anInPort->PortName() << " " << anInPort->State() << " " << anInPort->PortStatus() << endl ;
if ( anInPort->IsGate() && anOutPort == NULL ) {
InReady += 1 ;
anInPort->State( SUPERV::ReadyState ) ;
if ( anInPort->State() == SUPERV::ReadyState ) {
InReady += 1 ;
cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " "
- << anInPort->PortName() << " Was Done from "
- << anOutPort->NodeName() << " " << anOutPort->PortName()
- << " ReadyState " ;
+ << anInPort->PortName() << " Was Done from Node "
+ << anOutPort->NodeName() << "( " << anOutPort->PortName()
+ << ") ReadyState " ;
#ifdef _DEBUG_
if ( GraphBase::Base::_prof_debug ) {
anOutPort->StringValue( *GraphBase::Base::_fdebug ) ;
anInPort->State( SUPERV::ReadyState ) ;
InReady += 1 ;
cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " "
- << anInPort->PortName() << " Was Done from "
- << anOutPort->NodeName() << " " << anOutPort->PortName()
- << " LoopBeginning " << LoopBeginning ;
+ << anInPort->PortName() << " Was Done from Node "
+ << anOutPort->NodeName() << "( " << anOutPort->PortName()
+ << ") LoopBeginning " << LoopBeginning ;
#ifdef _DEBUG_
if ( GraphBase::Base::_prof_debug ) {
anOutPort->StringValue( *GraphBase::Base::_fdebug ) ;
anInPort->State( SUPERV::ReadyState ) ;
InReady += 1 ;
cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " "
- << anInPort->PortName() << " Was Done from "
- << anOutPort->NodeName() << " " << anOutPort->PortName()
- << " LoopFinished" ;
+ << anInPort->PortName() << " Was Done from Node "
+ << anOutPort->NodeName() << "( " << anOutPort->PortName()
+ << ") LoopFinished" ;
#ifdef _DEBUG_
if ( GraphBase::Base::_prof_debug ) {
anOutPort->StringValue( *GraphBase::Base::_fdebug ) ;
anInPort->State( SUPERV::ReadyState ) ;
InReady += 1 ;
cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " "
- << anInPort->PortName() << " Was Done from "
- << anOutPort->NodeName() << " " << anOutPort->PortName()
- << " SwitchFinished" ;
+ << anInPort->PortName() << " Was Done from Node "
+ << anOutPort->NodeName() << "( " << anOutPort->PortName()
+ << ") SwitchFinished" ;
+#ifdef _DEBUG_
+ if ( GraphBase::Base::_prof_debug ) {
+ anOutPort->StringValue( *GraphBase::Base::_fdebug ) ;
+ }
+#endif
+ cdebug << endl ;
+ }
+ else if ( anInPort->IsGate() &&
+ _OutNode->Graph()->GetGraphNode( anOutPort->NodeName() )->IsGOTONode() ) {
+// GateOutPort of GOTONodes are always opened
+ anInPort->State( SUPERV::ReadyState ) ;
+ InReady += 1 ;
+ CORBA::Any * anAny = new CORBA::Any() ;
+ *anAny <<= (long ) 1 ;
+ _OutNode->Graph()->GetGraphNode( anOutPort->NodeName() )->GetChangeNodeOutGate()->Value( anAny ) ;
+ cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " "
+ << anInPort->PortName() << " Was Done from Node "
+ << anOutPort->NodeName() << "( " << anOutPort->PortName()
+ << ") GOTONode" ;
#ifdef _DEBUG_
if ( GraphBase::Base::_prof_debug ) {
anOutPort->StringValue( *GraphBase::Base::_fdebug ) ;
}
else {
cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " "
- << anInPort->PortName() << " Was NOT Done from "
- << anOutPort->NodeName() << " " << anOutPort->PortName() << " "
+ << anInPort->PortName() << " Was NOT Done from Node "
+ << anOutPort->NodeName() << "( " << anOutPort->PortName() << ") "
<< " " << Automaton()->StateName( State() ) << " DataConnected "
<< anInPort->IsDataConnected() << " LoopBeginning "
<< LoopBeginning << endl ;
InReady += 1 ;
anInPort->State( SUPERV::ReadyState ) ;
cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " "
- << anInPort->PortName() << " Gate is Opened from "
- << anOutPort->NodeName() << " " << anOutPort->PortName()
- << " " ;
+ << anInPort->PortName() << " Gate is Opened from Node "
+ << anOutPort->NodeName() << "( " << anOutPort->PortName()
+ << ") " ;
#ifdef _DEBUG_
if ( GraphBase::Base::_prof_debug ) {
anOutPort->StringValue( *GraphBase::Base::_fdebug ) ;
else if ( LoopFinished ) {
anInPort->State( SUPERV::ReadyState ) ;
cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " "
- << anInPort->PortName() << " GATE IS CLOSED from "
- << anOutPort->NodeName() << " " << anOutPort->PortName()
- << " LoopFinished" ;
+ << anInPort->PortName() << " GATE IS CLOSED from Node "
+ << anOutPort->NodeName() << "( " << anOutPort->PortName()
+ << ") LoopFinished" ;
#ifdef _DEBUG_
if ( GraphBase::Base::_prof_debug ) {
anOutPort->StringValue( *GraphBase::Base::_fdebug ) ;
}
else {
cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " "
- << anInPort->PortName() << " GATE IS CLOSED from "
- << anOutPort->NodeName() << " " << anOutPort->PortName()
- << " " ;
+ << anInPort->PortName() << " GATE IS CLOSED from Node "
+ << anOutPort->NodeName() << "( " << anOutPort->PortName()
+ << ") " ;
#ifdef _DEBUG_
if ( GraphBase::Base::_prof_debug ) {
anOutPort->StringValue( *GraphBase::Base::_fdebug ) ;
InReady += 1 ;
anInPort->State( SUPERV::ReadyState ) ;
cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " "
- << anInPort->PortName() << " " << anInPort->PortStatus() << " is Done from "
- << anOutPort->NodeName() << " " << anOutPort->PortName() << " " << anOutPort->PortStatus() << " " ;
+ << anInPort->PortName() << " " << anInPort->PortStatus() << " is Done from Node "
+ << anOutPort->NodeName() << "( " << anOutPort->PortName() << ") "
+ << anOutPort->PortStatus() << " " ;
#ifdef _DEBUG_
if ( GraphBase::Base::_prof_debug ) {
anOutPort->StringValue( *GraphBase::Base::_fdebug ) ;
}
}
else {
- cdebug << pthread_self() << "/" << ThreadNo() << " " << Name() << " "
- << anInPort->PortName() << " " << anInPort->PortStatus() << " is NOT Done from "
- << anOutPort->NodeName() << " " << anOutPort->PortName() << " " << anOutPort->PortStatus() << " " ;
+ cdebug << pthread_self() << "/" << ThreadNo() << " Node " << Name() << "( "
+ << anInPort->PortName() << ") " << anInPort->PortStatus()
+ << " is NOT Done from Node "
+ << anOutPort->NodeName() << "( " << anOutPort->PortName() << ") "
+ << anOutPort->PortStatus() << " " ;
}
}
ControlState() == SUPERV::ToKillDoneState ||
ControlState() == SUPERV::ToStopState ) {
cdebug << ThreadNo() << "StartComponent Error or ToKillState" << endl ;
+ MESSAGE(pthread_self() << "Executor::InNode::DataReady_ExecuteAction of " << Name()
+ << " ControlState " << Automaton()->ControlStateName( ControlState() )
+ << " BEFORE execution ThreadNo " << ThreadNo() ) ;
Err = true ;
}
else {
+ if ( ControlState() == SUPERV::ToSuspendState ) {
+ cdebug << ThreadNo() << "ToSuspendState before running." << endl ;
+ MESSAGE(ThreadNo() << "ToSuspendState before running.") ;
+ }
if ( !Err ) {
// ostringstream astr ;
// astr << "Graph " << _OutNode->Graph()->Name() << " Run of Node " << Name() ;
}
if ( IsOneOfInLineNodes() ) {
cdebug << " , PyFuncName '" << InLineNode()->PyFuncName() << "' PyRunMethod "
- << InLineNode()->PyRunMethod() << " length " << (*InLineNode()->PythonFunction()).length() ;
+ << InLineNode()->PyRunMethod() << " length "
+ << (*InLineNode()->PythonFunction()).length() ;
}
cdebug << ")" << endl ;
SetPyCpuUsed() ;
try {
// if ( IsInLineNode() && (*InLineNode()->PythonFunction()).length() &&
+ bool ItIsaLoop = false ;
bool CopyInOut = false ;
if ( IsInLineNode() && /*InLineNode()->PyRunMethod() &&*/
strlen( InLineNode()->PyFuncName() ) ) {
-// cdebug << ThreadNo() << " !ObjInterface " << Name() << " PyFuncName '"
-// << InLineNode()->PyFuncName()
-// << "' IsInLineNode PyDynInvoke" << endl ;
+ cdebug << ThreadNo() << " !ObjInterface " << Name() << " PyFuncName '"
+ << InLineNode()->PyFuncName()
+ << "' IsInLineNode PyDynInvoke" << endl ;
StsPyDynInvoke = PyDynInvoke( InLineNode()->PyRunMethod() ,
InLineNode()->PyFuncName() ,
&InParametersList[0] , ServiceInParameter().length() ,
&OutParametersList[0] , ServiceOutParameter().length() ) ;
- }
+ if ( !StsPyDynInvoke ) {
+ RemovePyDynInvoke( InLineNode()->PyFuncName() ) ;
+ } }
else if ( IsLoopNode() ) {
+ ItIsaLoop = true ;
bool CopyOutIn = false ;
- if ( GetNodeInLoop()->GetOutPort()->BoolValue() && /*InLineNode()->PyRunMethod() &&*/
- strlen( InLineNode()->PyFuncName() ) ) { // InLoop Port
-// cdebug << ThreadNo() << " !ObjInterface " << Name()
-// << " IsLoopNode PyDynInvoke '" << InLineNode()->PyFuncName()
-// << "'" << endl ;
- StsPyDynInvoke = PyDynInvoke( InLineNode()->PyRunMethod() ,
- InLineNode()->PyFuncName() ,
- &InParametersList[1] , ServiceInParameter().length() ,
- &OutParametersList[1] , ServiceOutParameter().length() ) ;
- CopyOutIn = true ;
+// Switch between Init() and Next()
+// if InLoop port is true and does not come from EndLoop ==> execute Init
+// if InLoop port is false or come from EndLoop ==> execute Next
+// GraphExecutor::InNode * anEndLoopNode = (GraphExecutor::InNode * ) CoupledNode()->GetInNode() ;
+// if ( GetNodeInLoop()->GetOutPort()->BoolValue() &&
+ if ( _InitLoop ) {
+ if ( strlen( InLineNode()->PyFuncName() ) ) { // InLoop Port = true ==> Init()
+ cdebug << ThreadNo() << " !ObjInterface " << Name()
+ << " IsLoopNode PyDynInvoke '" << InLineNode()->PyFuncName()
+ << "' InitLoop " << LoopNode()->PyRunMethod() << endl ;
+ StsPyDynInvoke = PyDynInvoke( InLineNode()->PyRunMethod() ,
+ InLineNode()->PyFuncName() ,
+ &InParametersList[1] , ServiceInParameter().length() ,
+ &OutParametersList[1] , ServiceOutParameter().length() ) ;
+ if ( !StsPyDynInvoke ) {
+ RemovePyDynInvoke( InLineNode()->PyFuncName() ) ;
+ }
+ CopyOutIn = true ;
+ }
+ else {
+ cdebug << ThreadNo() << " !ObjInterface " << Name()
+ << " IsLoopNode NO PyDynInvoke Void PyFuncName InitLoop" << endl ;
+ }
+ cdebug << ThreadNo() << " !ObjInterface " << Name()
+ << " IsLoopNode _InitLoop Reset after Init() Python Function" << endl ;
+ _InitLoop = false ;
}
else if ( LoopNode()->PyNextMethod() &&
- strlen( LoopNode()->PyNextName() ) ){
-// cdebug << ThreadNo() << " !ObjInterface " << Name()
-// << " IsLoopNode PyDynInvoke '" << LoopNode()->PyNextName()
-// << "'" << endl ;
+ strlen( LoopNode()->PyNextName() ) ){ // InLoop Port = false ==> Next()
+ cdebug << ThreadNo() << " !ObjInterface " << Name()
+ << " IsLoopNode PyDynInvoke '" << LoopNode()->PyNextName()
+ << "' " << LoopNode()->PyNextMethod() << endl ;
StsPyDynInvoke = PyDynInvoke( LoopNode()->PyNextMethod() ,
LoopNode()->PyNextName() ,
&InParametersList[1] , ServiceInParameter().length() ,
&OutParametersList[1] , ServiceOutParameter().length() ) ;
+ if ( !StsPyDynInvoke ) {
+ RemovePyDynInvoke( LoopNode()->PyNextName() ) ;
+ }
CopyOutIn = true ;
}
- if ( StsPyDynInvoke && CopyOutIn ) {
-// cdebug << ThreadNo() << " !ObjInterface " << Name()
-// << " IsLoopNode PyDynInvoke '" << LoopNode()->PyMoreName()
-// << "' Copy of " << ServiceInParameter().length()
-// << " OutParameters" << endl ;
- int i ;
- for ( i = 1 ; i <= (int ) ServiceInParameter().length() ; i++ ) {
- InParametersList[i].Value = OutParametersList[i].Value ;
- InParametersList[i].Name = OutParametersList[i].Name ;
+ else {
+ cdebug << ThreadNo() << " !ObjInterface " << Name()
+ << " IsLoopNode NO PyDynInvoke Void PyFuncName NextLoop" << endl ;
+ }
+ if ( StsPyDynInvoke ) {
+ if ( CopyOutIn ) {
+ cdebug << ThreadNo() << " !ObjInterface " << Name()
+ << " IsLoopNode PyDynInvoke '" << LoopNode()->PyMoreName()
+ << "' Copy of " << ServiceInParameter().length()
+ << " OutParameters" << endl ;
+ int i ;
+// Start at 1 : Do not copy InLoop ( InLoop == true <==> Init ; InLoop == false <==> Next )
+ for ( i = 1 ; i <= (int ) ServiceInParameter().length() ; i++ ) {
+ InParametersList[i].Value = OutParametersList[i].Value ;
+ InParametersList[i].Name = OutParametersList[i].Name ;
//#if 0
- switch ( InParametersList[i].Value.type()->kind() ) {
- case CORBA::tk_string :
- char * t;
- InParametersList[i].Value >>= t ;
- cdebug << "ArgOut->In" << i << " : "
- << InParametersList[i].Name.c_str()
- << " Value(string) " << t << endl ;
- break ;
- case CORBA::tk_double :
- double d;
- InParametersList[i].Value >>= d;
- cdebug << "ArgOut->In" << i << " : "
- << InParametersList[i].Name.c_str()
- << " Value(double) " << d << endl ;
- break ;
- case CORBA::tk_long :
- long l;
- InParametersList[i].Value >>= l;
- cdebug << "ArgOut->In" << i << " : "
- << InParametersList[i].Name.c_str()
- << " Value(long) " << l << endl ;
- break ;
- case CORBA::tk_objref :
- CORBA::Object_ptr obj ;
- char * retstr ;
- try {
- InParametersList[i].Value >>= obj ;
- retstr = ObjectToString( obj );
+ switch ( InParametersList[i].Value.type()->kind() ) {
+ case CORBA::tk_string :
+ char * t;
+ InParametersList[i].Value >>= t ;
cdebug << "ArgOut->In" << i << " : "
<< InParametersList[i].Name.c_str()
- << " Value(object reference) " << retstr << endl ;
- }
- catch ( ... ) {
+ << " Value(string) " << t << endl ;
+ break ;
+ case CORBA::tk_double :
+ double d;
+ InParametersList[i].Value >>= d;
cdebug << "ArgOut->In" << i << " : "
<< InParametersList[i].Name.c_str()
- << " Value(object reference) Catched ERROR" << endl ;
- }
- break ;
- default :
- cdebug << "ArgOut->In" << i << " : "
- << InParametersList[i].Name.c_str()
- << " Value(other) ERROR" << endl ;
- }
+ << " Value(double) " << d << endl ;
+ break ;
+ case CORBA::tk_long :
+ long l;
+ InParametersList[i].Value >>= l;
+ cdebug << "ArgOut->In" << i << " : "
+ << InParametersList[i].Name.c_str()
+ << " Value(long) " << l << endl ;
+ break ;
+ case CORBA::tk_objref :
+ CORBA::Object_ptr obj ;
+ char * retstr ;
+ try {
+ InParametersList[i].Value >>= obj ;
+ retstr = ObjectToString( obj );
+ cdebug << "ArgOut->In" << i << " : "
+ << InParametersList[i].Name.c_str()
+ << " Value(object reference) " << retstr << endl ;
+ }
+ catch ( ... ) {
+ cdebug << "ArgOut->In" << i << " : "
+ << InParametersList[i].Name.c_str()
+ << " Value(object reference) Catched ERROR" << endl ;
+ }
+ break ;
+ default :
+ cdebug << "ArgOut->In" << i << " : "
+ << InParametersList[i].Name.c_str()
+ << " Value(other) ERROR" << endl ;
+ }
//#endif
+ }
}
if ( LoopNode()->PyMoreMethod() && strlen( LoopNode()->PyMoreName() ) ) {
+ cdebug << ThreadNo() << " !ObjInterface " << Name()
+ << " IsLoopNode PyDynInvoke '" << LoopNode()->PyMoreName()
+ << "' " << LoopNode()->PyMoreMethod() << endl ;
StsPyDynInvoke = PyDynInvoke( LoopNode()->PyMoreMethod() ,
LoopNode()->PyMoreName() ,
&InParametersList[1] , ServiceInParameter().length() ,
&OutParametersList[0] , ServiceOutParameter().length()+1 ) ;
+ if ( !StsPyDynInvoke ) {
+ RemovePyDynInvoke( LoopNode()->PyMoreName() ) ;
+ }
}
else {
+ cdebug << ThreadNo() << " !ObjInterface " << Name()
+ << " IsLoopNode PyDynInvoke '" << LoopNode()->PyMoreName()
+ << "' No MoreMethod" << endl ;
CopyInOut = true ;
}
}
- else if ( !StsPyDynInvoke ) {
+ else {
Err = true ;
cdebug << ThreadNo() << " InLineNode " << Name() << " "
<< InLineNode()->PyFuncName() << "/" << LoopNode()->PyNextName()
InLineNode()->PyFuncName() ,
&InParametersList[0] , ServiceInParameter().length() ,
&OutParametersList[0] , ServiceOutParameter().length() ) ;
+ if ( !StsPyDynInvoke ) {
+ RemovePyDynInvoke( InLineNode()->PyFuncName() ) ;
+ }
}
// else if ( IsGOTONode() && (*GOTONode()->PythonFunction()).length() &&
else if ( IsGOTONode() && /*InLineNode()->PyRunMethod() &&*/
InLineNode()->PyFuncName() ,
&InParametersList[0] , ServiceInParameter().length() ,
&OutParametersList[0] , ServiceOutParameter().length() ) ;
+ if ( !StsPyDynInvoke ) {
+ RemovePyDynInvoke( GOTONode()->PyFuncName() ) ;
+ }
}
// else if ( IsEndSwitchNode() && (*InLineNode()->PythonFunction()).length() &&
else if ( ( IsEndSwitchNode() ) &&
InLineNode()->PyFuncName() ,
&InParametersList[0] , ServiceInParameter().length() ,
&OutParametersList[0] , ServiceOutParameter().length() ) ;
+ if ( !StsPyDynInvoke ) {
+ RemovePyDynInvoke( InLineNode()->PyFuncName() ) ;
+ }
}
else if ( ( IsEndLoopNode() ) &&
InLineNode()->PyRunMethod() && strlen( InLineNode()->PyFuncName() ) ) {
-// cdebug << ThreadNo() << " !ObjInterface " << Name() << " PyFuncName '"
-// << InLineNode()->PyFuncName()
-// << "' IsSwitchNode PyDynInvoke" << endl ;
+ cdebug << ThreadNo() << " !ObjInterface " << Name() << " PyFuncName '"
+ << InLineNode()->PyFuncName()
+ << "' IsSwitchNode PyDynInvoke" << endl ;
StsPyDynInvoke = PyDynInvoke( InLineNode()->PyRunMethod() ,
InLineNode()->PyFuncName() ,
&InParametersList[0] , ServiceInParameter().length() + 1 ,
&OutParametersList[0] , ServiceOutParameter().length() + 1 ) ;
+ if ( !StsPyDynInvoke ) {
+ RemovePyDynInvoke( InLineNode()->PyFuncName() ) ;
+ }
}
+
// else if ( (*InLineNode()->PythonFunction()).length() == 0 ||
- if ( InLineNode()->PyRunMethod() == NULL ||
- strlen( InLineNode()->PyFuncName() ) == 0 || CopyInOut ) {
+ if ( (!ItIsaLoop && ( InLineNode()->PyRunMethod() == NULL ||
+ strlen( InLineNode()->PyFuncName() ) == 0 ) ) || CopyInOut ) {
+// This is a void Python Function : without code (No PyFuncName)
// cdebug << ThreadNo() << " !ObjInterface " << Name()
// << " Copy of " << ServiceInParameter().length()
// << " OutParameters" << endl ;
if ( IsLoopNode() || IsEndLoopNode() ) {
argout0 = 1 ;
argin0 = 1 ; // after DoLoop
- if ( IsLoopNode() ) {
- OutParametersList[0].Value = InParametersList[0].Value ; // DoLoop
+ if ( IsLoopNode() ) { // More() is void
+// OutParametersList[0].Value = InParametersList[0].Value ; // DoLoop
+ cdebug << Name() << " Not Beginning of loop and non void EndLoop : DoLoop = EndLoop(DoLoop)"
+ << endl ;
+ GraphExecutor::InNode * anEndLoopNode = (GraphExecutor::InNode * ) CoupledNode()->GetInNode() ;
+ OutParametersList[0].Value = *anEndLoopNode->GetNodeOutLoop()->Value() ; // DoLoop = EndLoop(DoLoop)
}
}
for ( i = 0 ; i < (int ) ServiceInParameter().length() ; i++ ) {
}
catch( ... ) {
cdebug << "DynInvoke setProperties catched ERROR" << endl ;
- Err = true ;
+ Err = true;
}
}
if ( !Err && IsComputingNode() ) {
<< " IsComputingNode DynInvoke" << endl ;
cdebug << ServiceInParameter().length()-1 << " input parameters and "
<< ServiceOutParameter().length() << " output parameters" << endl ;
+ IsLoading( false ) ;
DynInvoke( myObjComponent,
ServiceName() ,
&InParametersList[1] , ServiceInParameter().length()-1 ,
&OutParametersList[0] , ServiceOutParameter().length() ) ;
}
- else if ( !Err &&IsFactoryNode() ) {
+ else if ( !Err && IsFactoryNode() ) {
cdebug << ThreadNo() << " !ObjInterface " << Name()
<< " IsFactoryNode DynInvoke" << endl ;
cdebug << ServiceInParameter().length() << " input parameters and "
<< ServiceOutParameter().length() << " output parameters" << endl ;
+ IsLoading( false ) ;
DynInvoke( myObjComponent,
ServiceName() ,
&InParametersList[0] , ServiceInParameter().length() ,
cdebug << ThreadNo() << " !ObjInterface " << Name()
<< " Node(Component) Dynamic Call Exception catched ERROR"
<< endl ;
+//Reset of _ThreadId in the Container ...
+ try {
+ myObjComponent->Kill_impl() ;
+ }
+ catch( ... ) {
+ }
}
}
}
}
}
-// else {
-// sleep( 1 ) ;
-// }
// ostringstream astr ;
// astr << "Graph " << _OutNode->Graph()->Name() << " Node " << Name() << " is done : "
// << Automaton()->StateName( State() ) ;
// _OutNode->Graph()->ObjImpl()->sendMessage( NOTIF_STEP, astr.str().c_str() ) ;
+
if ( Err ) {
+
+ // if exception or something else - IsLoading( false ) may not NOT has been called
+ if ( IsLoading() )
+ IsLoading( false );
+
if ( ControlState() == SUPERV::ToKillState ||
ControlState() == SUPERV::ToKillDoneState ||
ControlState() == SUPERV::ToStopState ) {
// cdebug << ThreadNo() << " --> Executing_SuccessAction " << Name() << endl;
_OutNode->PushEvent( this , GraphExecutor::SuccessedExecutingEvent ,
GraphExecutor::SuccessedState ) ;
+ MESSAGE(pthread_self() << "Executor::InNode::Executing_SuccessAction of " << Name()
+ << " ControlState " << Automaton()->ControlStateName( ControlState() )
+ << " AFTER execution ThreadNo " << ThreadNo() ) ;
SUPERV::ControlState aControl = ControlState() ;
switch ( aControl ) {
case SUPERV::VoidState : {
State( GraphExecutor::DataWaitingState ) ;
for ( i = 0 ; i < GetNodeInPortsSize() ; i++ ) {
GraphBase::InPort * anInPort = GetChangeNodeInPort( i ) ;
- if ( anInPort->IsGate() ) { // Loop : Open the doors
+ cdebug << "SetWaitingStates InPort " << Name() << "( " << anInPort->PortName() << " ) "
+ << anInPort->PortStatus() << " " << anInPort->State() << endl ;
+// JR Debug 07.01.2005 : Close the Gates instead of open !!!
+ if ( anInPort->IsGate() ) { // Loop : Close the doors
GraphBase::OutPort * anOutPort = anInPort->GetOutPort() ;
if ( anOutPort ) {
CORBA::Any * anAny = new CORBA::Any() ;
- *anAny <<= (long ) 1 ;
+// *anAny <<= (long ) 1 ;
+ *anAny <<= (long ) 0 ;
anOutPort->Value( anAny ) ;
- anInPort->State( SUPERV::ReadyState ) ;
+ anInPort->State( SUPERV::WaitingState ) ;
}
}
- else if ( anInPort->State() != SUPERV::WaitingState ) {
+ else if ( anInPort->State() != SUPERV::WaitingState &&
+ !anInPort->IsDataConnected() ) {
if ( !docdebug ) {
cdebug << ThreadNo()
<< " --> GraphExecutor::InNodeThreads::SetWaitingStates " << Name() << endl;
anInPort->State( SUPERV::WaitingState ) ;
}
}
+ cdebug << " --> " << Name() << "( " << anInPort->PortName() << " ) "
+ << anInPort->PortStatus() << " " << anInPort->State() << endl ;
}
for ( i = 0 ; i < GetNodeOutPortsSize() ; i++ ) {
GraphBase::OutPort * anOutPort = GetChangeNodeOutPort( i ) ;
for ( j = 0 ; j < anOutPort->InPortsSize() ; j++ ) {
if ( !( IsGOTONode() && anOutPort->IsGate() ) &&
- !( IsEndLoopNode() && ( anOutPort->IsGate() ||
- anOutPort->IsLoop() ) ) &&
+ !( IsEndLoopNode() && ( anOutPort->IsGate() || anOutPort->IsLoop() ) ) &&
!anOutPort->IsDataStream() &&
!anOutPort->ChangeInPorts( j )->IsDataStream() &&
!anOutPort->ChangeInPorts( j )->IsExternConnected() ) {
<< anOutPort->ChangeInPorts( j )->NodeName() << "( "
<< anOutPort->ChangeInPorts( j )->PortName() << " "
<< anOutPort->ChangeInPorts( j )->PortStatus() << " )" << endl;
- if ( strcmp( anOutPort->ChangeInPorts( j )->GetOutPort()->NodeName() , Name() ) ) {
+ GraphBase::ComputingNode * aToNode ;
+ aToNode = _OutNode->Graph()->GetChangeGraphNode( anOutPort->ChangeInPorts( j )->NodeName() ) ;
+// JR 12.01.2005 : the OutPort linked to the InPort of a EndSwitchNode was changed so final
+// values of InPorts of EndSwitchNode may be wrong
+ if ( !aToNode->IsEndSwitchNode() &&
+ strcmp( anOutPort->ChangeInPorts( j )->GetOutPort()->NodeName() , Name() ) ) {
// After EndLoopNode or GOTONode the Input Ports of LoopNode or LabelNode have their values from
// EndLoopNode or GOTONode. But if there is several nested loops we should re-establish.
cdebug << ThreadNo()
- << " InNodeThreads::SetWaitingStates OutPort->ChangeInPorts( j )->OutPort()->NodeName "
- << anOutPort->ChangeInPorts( j )->GetOutPort()->NodeName() << " != "
+ << " InNodeThreads::SetWaitingStates Node " << Name() << " "
+ << anOutPort->ChangeInPorts( j )->GetOutPort()->NodeName() << "( "
+ << anOutPort->ChangeInPorts( j )->GetOutPort()->PortName() << " ) != "
<< Name() << " : Restored to " << anOutPort->NodeName() << "( "
<< anOutPort->PortName() << " )" << endl ;
anOutPort->ChangeInPorts( j )->ChangeOutPort( anOutPort ) ;
}
- GraphExecutor::InNode * aNode = (GraphExecutor::InNode * ) _OutNode->Graph()->GetChangeGraphNode( anOutPort->ChangeInPorts( j )->NodeName() )->GetInNode() ;
+ GraphExecutor::InNode * aNode = (GraphExecutor::InNode * ) aToNode->GetInNode() ;
if ( aNode != EndNode ) {
aNode->SetWaitingStates( EndNode ) ;
}
DoneAction() ;
if ( IsMacroNode() ) {
- cdebug << ThreadNo() << " Successed_SuccessAction " << Name() << " LinkedNodes->SomeDataReady already done"
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction " << Name() << " LinkedNodes->SomeDataReady already done"
<< endl ;
return 1;
}
if ( IsGOTONode() ||
( IsEndLoopNode() && GetNodeInLoop()->GetOutPort()->BoolValue() ) ) {
- cdebug << ThreadNo() << " Successed_SuccessAction " << Name()
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction " << Name()
<< " SetWaitingStates " << endl ;
const GraphBase::OutPort * aGateOutPort ;
if ( IsGOTONode() ) {
else {
aGateOutPort = GetNodeOutLoop() ;
}
+ if ( aGateOutPort->InPortsSize() != 1 ) {
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction aGateOutPort->InPortsSize "
+ << aGateOutPort->InPortsSize() << " != 1 ERROR " << Name() << endl ;
+ }
+ GraphExecutor::InNode * aLabelNode = NULL ;
for ( i = 0 ; i < aGateOutPort->InPortsSize() ; i++ ) {
const GraphBase::InPort * anInPort = aGateOutPort->InPorts( i ) ;
- GraphExecutor::InNode * aLabelNode = (GraphExecutor::InNode *) _OutNode->Graph()->GetChangeGraphNode( anInPort->NodeName() )->GetInNode() ;
- cdebug << ThreadNo() << " Successed_SuccessAction " << Name() << " will Loop to HeadNode "
+ aLabelNode = (GraphExecutor::InNode *) _OutNode->Graph()->GetChangeGraphNode( anInPort->NodeName() )->GetInNode() ;
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction " << Name() << " will Loop to HeadNode "
<< aLabelNode->Name() << " from port " << anInPort->PortName() << endl ;
aLabelNode->SetWaitingStates( this ) ;
+// JR 07.01.2005 Debug : Open the Gate of the coupledNode closed by SetWaitingStates
+ GraphBase::OutPort * anOutPort = aLabelNode->GetChangeNodeInGate()->GetOutPort() ;
+ if ( anOutPort ) {
+ CORBA::Any * anAny = new CORBA::Any() ;
+ *anAny <<= (long ) 1 ;
+ anOutPort->Value( anAny ) ;
+ aLabelNode->GetChangeNodeInGate()->State( SUPERV::ReadyState ) ;
+ }
for ( j = 0 ; j < aLabelNode->GetNodeInPortsSize() ; j++ ) {
const GraphBase::InPort * anInPort = aLabelNode->GetNodeInPort( j ) ;
if ( anInPort->GetOutPort() ) {
if ( !aBusParamOutPort->IsGate() ) {
GraphBase::InPort * aBusParamChangeInPort = NULL ;
if ( aBusParamOutPort->IsLoop() ) {
- aBusParamChangeInPort = aLabelNode->GetChangeNodeInLoop() ;
+// For EndLoop do not copy EndLoop(DoLoop) in Loop(InLoop)
+// aBusParamChangeInPort = aLabelNode->GetChangeNodeInLoop() ;
}
else {
aBusParamChangeInPort = aLabelNode->GetChangeInPort( aBusParamOutPort->PortName() ) ;
}
if ( aBusParamChangeInPort ) {
aBusParamChangeInPort->ChangeOutPort( aBusParamOutPort ) ;
- cdebug << ThreadNo() << " Successed_SuccessAction " << Name() << " ChangeOutPort to HeadNode "
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction " << Name() << " ChangeOutPort to HeadNode "
<< aLabelNode->Name() << "(" << aBusParamChangeInPort->PortName() << ") from port "
<< aBusParamOutPort->PortName() << endl ;
- if ( !aLabelNode->IsLockedDataWait() ) {
- res = aLabelNode->SendSomeDataReady( Name() ) ;
- if ( res ) {
- if ( firsttoNode == NULL &&
- aLabelNode->ThreadNo() == pthread_self() ) {
- firsttoNode = aLabelNode ;
- cdebug << ThreadNo() << " Successed_SuccessAction firsttoNode "
- << aLabelNode->Name() << endl ;
- }
- else if ( firstzeroNode == NULL &&
- aLabelNode->ThreadNo() == 0 ) {
- firstzeroNode = aLabelNode ;
- }
- else {
- SomeDataNodes.push_back( aLabelNode ) ;
- cdebug << ThreadNo() << " Successed_SuccessAction " << Name() << " push "
- << aLabelNode->Name() << " " << SomeDataNodes.size()
- << endl ;
- }
- }
- }
- else {
- cdebug << ThreadNo()
- << " Successed_SuccessAction Loop to HeadNode "
- << aLabelNode->Name() << " with datas from " << Name() << "("
- << aBusParamOutPort->PortName() << ") to port "
- << aBusParamChangeInPort->PortName() << endl;
- }
- }
- else {
- cdebug << ThreadNo() << " ERROR in Successed_SuccessAction of " << Name()
- << " NO port " << aBusParamOutPort->PortName() << " in "
- << aLabelNode->Name() << endl;
}
+ }
+ }
+ }
+
+ if ( aLabelNode && !aLabelNode->IsLockedDataWait() ) {
+ res = aLabelNode->SendSomeDataReady( Name() ) ;
+ if ( res ) {
+ if ( firsttoNode == NULL &&
+ aLabelNode->ThreadNo() == pthread_self() ) {
+ firsttoNode = aLabelNode ;
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction firsttoNode "
+ << aLabelNode->Name() << endl ;
}
+ else if ( firstzeroNode == NULL &&
+ aLabelNode->ThreadNo() == 0 ) {
+ firstzeroNode = aLabelNode ;
+ }
+ else {
+ SomeDataNodes.push_back( aLabelNode ) ;
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction " << Name() << " push "
+ << aLabelNode->Name() << " " << SomeDataNodes.size()
+ << endl ;
+ }
}
+
for ( j = 0 ; j < aLabelNode->GetNodeInPortsSize() ; j++ ) {
const GraphBase::InPort * anInPort = aLabelNode->GetNodeInPort( j ) ;
if ( anInPort->GetOutPort() ) {
if ( firsttoNode == NULL &&
aLabelNode->ThreadNo() == pthread_self() ) {
firsttoNode = aLabelNode ;
- cdebug << ThreadNo() << " Successed_SuccessAction firsttoNode "
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction firsttoNode "
<< aLabelNode->Name() << endl ;
}
else if ( firstzeroNode == NULL &&
}
else {
SomeDataNodes.push_back( aLabelNode ) ;
- cdebug << ThreadNo() << " Successed_SuccessAction " << Name() << " push "
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction " << Name() << " push "
<< aLabelNode->Name() << " " << SomeDataNodes.size()
<< endl ;
}
}
}
else {
- cdebug << ThreadNo() << " ERROR in Successed_SuccessAction of " << Name()
+ cdebug << pthread_self() << "/" << ThreadNo() << " ERROR in Successed_SuccessAction of " << Name()
<< " NO port " << aGateOutPort->PortName() << " in "
<< aLabelNode->Name() << endl;
}
GraphBase::ComputingNode * aComputingNode ;
aComputingNode = (GraphBase::ComputingNode * ) LinkedNodes( i ) ;
toNode = (GraphExecutor::InNode *) aComputingNode->GetInNode() ;
- cdebug << ThreadNo() << " Successed_SuccessAction of " << Name()
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction of " << Name()
<< " [" << i << "] " << LinkedNodes( i )->Name() << " toNode " << toNode << " IgnoreForEndLoop "
<< IgnoreForEndLoop ;
if ( toNode ) {
LoopOutPort->PortStatus( DataConnected );
LoopOutPort->State( SUPERV::ReadyState ) ;
LoopOutPort->Done( true ) ;
- CORBA::Any * anAny = new CORBA::Any() ;
+ CORBA::Any * anAny = new CORBA::Any() ; // InitLoop
*anAny <<= (long ) 1 ;
LoopOutPort->Value( anAny ) ;
int j ;
toNode->GetChangeNodeInPort( j )->InitialOutPort() ;
}
}
- cdebug << ThreadNo() << " Successed_SuccessAction " << toNode->Name() << "->SendSomeDataReady( "
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction " << toNode->Name() << "->SendSomeDataReady( "
<< Name() << " )" << endl ;
res = toNode->SendSomeDataReady( Name() ) ;
if ( res ) {
if ( firsttoNode == NULL &&
toNode->ThreadNo() == pthread_self() ) {
firsttoNode = toNode ;
- cdebug << ThreadNo() << " Successed_SuccessAction firsttoNode "
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction firsttoNode "
<< toNode->Name() << endl ;
}
else if ( firstzeroNode == NULL &&
}
else {
SomeDataNodes.push_back( toNode ) ;
- cdebug << ThreadNo() << " Successed_SuccessAction " << Name() << " push "
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction " << Name() << " push "
<< toNode->Name() << " " << SomeDataNodes.size() << endl ;
}
}
if ( firsttoNode == NULL && firstzeroNode ) {
firsttoNode = firstzeroNode ;
- cdebug << ThreadNo()
+ cdebug << pthread_self() << "/" << ThreadNo()
<< " Successed_SuccessAction firsttoNode = firstzeroNode "
<< endl ;
}
else if ( firsttoNode && firstzeroNode ) {
SomeDataNodes.push_back( firstzeroNode ) ;
- cdebug << ThreadNo() << " Successed_SuccessAction " << Name() << " push firstzeroNode "
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction " << Name() << " push firstzeroNode "
<< firstzeroNode->Name() << " " << SomeDataNodes.size() << endl ;
}
else {
- cdebug << ThreadNo() << " Successed_SuccessAction " << Name() << " firsttoNode " << firsttoNode
+ cdebug << pthread_self() << "/" << ThreadNo() << " Successed_SuccessAction " << Name() << " firsttoNode " << firsttoNode
<< " firstzeroNode " << firstzeroNode << endl ;
}
bool GraphExecutor::InNode::SendSomeDataReady( char * FromNodeName ) {
bool RetVal = false ;
if ( IsDataFlowNode() ) {
- cdebug << ThreadNo() << " ----> " << Name()
+ cdebug << ThreadNo() << "InNode::SendSomeDataReady ----> " << Name()
<< " send Result to graph " << Name() << endl;
}
else {
// << ThreadNo() << " " << endl ;
State( GraphExecutor::DataWaitingState ) ;
}
+// We begin that LoopNode if SendSomeDataReady does not come from the corresponding EndLoopNode
+ if ( IsLoopNode() && strcmp( LoopNode()->CoupledNodeName() , FromNodeName ) ) {
+ cdebug << ThreadNo() << "InNode::SendSomeDataReady " << Name() << " Set _InitLoop from "
+ << FromNodeName << endl ;
+ _InitLoop = true ;
+ }
LockDataWait() ;
DataFromNode( FromNodeName ) ;
RetVal = !SendEvent( GraphExecutor::SomeDataReadyEvent );
int nInParams ,
ServicesAnyData * InParametersList ) {
int i ;
+ cdebug << ThreadNo() << " InParametersSet " << Name() << endl ;
for ( i = 0 ; i < nInParams ; i++ ) {
ServicesAnyData D = InParametersList[i];
GraphBase::InPort * anInPort = GetChangeNodeInPort(i) ;
*anAny <<= (long ) 0 ;
theOutPort->Value( anAny ) ;
}
- if ( !anInPort->IsDataStream() ) {
+ if ( !anInPort->IsDataStream() &&
+ !anInPort->IsDataConnected() ) {
anInPort->State( SUPERV::WaitingState ) ;
}
D.Name = CORBA::string_dup( anInPort->GetServicesParameter().Parametername ) ;
- cdebug << ThreadNo() << " ArgIn" << i << " " << anInPort->Kind() ;
+ cdebug << ThreadNo() << " ArgIn" << i << " " << anInPort->Kind()
+ << " " << anInPort->State() ;
cdebug << " " << D.Name << " " << anInPort->GetServicesParameter().Parametertype << " : " ;
D.Value = *theOutPort->Value() ; // CORBA::Any
string _Type = CORBA::string_dup( anInPort->GetServicesParameter().Parametertype ) ;
int i ;
GraphBase::OutPort * aGateOutPort = NULL ;
bool OrSwitch = false ;
- cdebug << "OutParametersSet " << Name() << " nOutParams " << nOutParams << " NewState " << NewState << endl ;
+ cdebug_in << "OutParametersSet " << Name() << " nOutParams " << nOutParams << " NewState "
+ << NewState << endl ;
// cout << "OutParametersSet " << Name() << " nOutParams " << nOutParams << " NewState " << NewState << endl ;
if ( nOutParams && !IsMacroNode() ) {
GraphBase::OutPort * anOutPort ;
anOutPort->Value( OutParametersList[i].Value );
if ( anOutPort->InPortsSize() && anOutPort->ChangeInPorts( 0 )->IsGate() ) {
if ( OrSwitch && anOutPort->BoolValue() ) {
- cdebug << "GraphExecutor::InNodeThreads::OutParameters more than one switch is true WARNING"
+ cdebug << "GraphExecutor::InNodeThreads::OutParameters more than one switch is true ERROR"
<< endl ;
+ RetVal = false ;
}
else {
OrSwitch = OrSwitch | anOutPort->BoolValue() ;
+ cdebug << "InNodeThreads::OutParameters OrSwitch = true" << endl ;
}
}
- cdebug << "OrSwitch " << OrSwitch ;
+ cdebug << "OutParametersSet OrSwitch " << OrSwitch ;
}
else {
cdebug << " Param " ;
}
if ( aGateOutPort && IsSwitchNode() ) {
if ( OrSwitch ) {
-// cdebug << ThreadNo() << " " << "Out0 " << Name() << " Close of "
-// << aGateOutPort->PortName() << " " << aGateOutPort->Kind() ;
+ cdebug << ThreadNo() << " " << "Out0 " << Name() << " Close of "
+ << aGateOutPort->PortName() << " " << aGateOutPort->Kind() ;
long l = 0;
OutParametersList[0].Value <<= l ;
aGateOutPort->Value( OutParametersList[0].Value ) ;
}
else {
-// cdebug << ThreadNo() << " " << "Out0 " << Name() << " Open of "
-// << aGateOutPort->PortName() << " " << aGateOutPort->Kind() ;
+ cdebug << ThreadNo() << " " << "Out0 " << Name() << " Open of "
+ << aGateOutPort->PortName() << " " << aGateOutPort->Kind() ;
long l = 1;
OutParametersList[0].Value <<= l ;
aGateOutPort->Value( OutParametersList[0].Value ) ;
}
}
}
+ cdebug_out << "OutParametersSet " << Name() << " nOutParams " << nOutParams << " NewState "
+ << NewState << " RetVal " << RetVal << endl ;
return RetVal ;
}