#include "DataFlowExecutor_OutNode.hxx"
#include "DataFlowEditor_DataFlow.hxx"
+#include "DataFlowExecutor_DataFlow.hxx"
// asv : 20.01.05 : changes involved with switching to old (HEAD) KERNEL
//extern Engines_Container_i * _TheContainer ;
else {
State( GraphExecutor::ErroredState ) ;
Done( true ) ;
- if ( IsDone() ) {
+ if ( IsDone() && Graph()->GraphMacroLevel() == 0 ) {
cdebug << " ==> theAutomaton->Executed() " << endl ;
theAutomaton->Executed() ;
}
// two graphs execution with two different python functions with the same name
// give aborted state for the second one
//Example : GraphLoopSwitchOfSwitchNOTValid, GraphLoopSwitchs and GraphLoopSwitchsBranches
- if ( IsDone() ) {
+ if ( IsDone() && Graph()->GraphMacroLevel() == 0 ) {
cdebug << " ==> theAutomaton->Executed() " << endl ;
theAutomaton->Executed() ;
}
<< EventQSize() << endl ;
cdebug << "================================================================================" << endl ;
+ if ( Graph()->GraphMacroLevel() != 0 ) {
+//JR NPAL14110 09.02.2007 : That must be done only at the end of SubGraph because we may
+// have an output of the SubGraph in a Loop !...
+// So that code must be done in CheckAllDone instead of OutParametersSet
+ cdebug << "CheckAllDone ToNodeName " << Name() << " CoupledNode "
+ << Graph()->CoupledNodeName() << Graph()->CoupledNode()
+ << endl ;
+ cdebug << "CheckAllDone GraphExecutor " << Graph()->CoupledNode()->GraphEditor()->Executor() << endl ;
+ const GraphBase::InPort * anInPort ;
+ GraphBase::OutPort * anOutPort ;
+ int i ;
+ for ( i = 0 ; i < Graph()->GetNodeOutDataNodePortsSize() ; i++ ) {
+ anInPort = Graph()->GetNodeOutDataNodePort( i ) ;
+ if ( !anInPort->IsGate() ) {
+ anOutPort = anInPort->GetOutPort() ;
+ Graph()->CoupledNode()->GraphEditor()->Executor()->OutputOfAny( Graph()->CoupledNodeName() ,
+ anInPort->PortName() ,
+ anOutPort->Value() ) ;
+ cdebug << "CheckAllDone OutputOfAny( " << Graph()->CoupledNodeName() << " , "
+ << anInPort->PortName() << " , value ) done" << endl ;
+ }
+ }
+ }
+
//PAL8520
//JR 23.02.2005, Debug : siftEvents() must be inside the pthread_mutex_lock
if ( pthread_mutex_lock( &_MutexWait ) ) {
<< " running threads " << _SuspendedThreads << " suspended threads IsDone() "
<< IsDone() ;
_run_func_thread = 0 ; // mkr : IPAL14711
- if ( IsDone() ) {
+ if ( IsDone() && Graph()->GraphMacroLevel() == 0 ) {
cdebug << " ==> theAutomaton->Executed() " << endl ;
theAutomaton->Executed() ;
}