_SuspendSync = false ;
_ResumeSync = false ;
- // asv : 13.12.04 : "Loading" state is ON (and OFF eventially) only for Computing, Factory, Inline nodes
- if ( !IsMacroNode() )
+ // asv : 13.12.04 : Decided to set "Loading" state for factory and computing nodes ONLY.
+ // See extended comment in p.2.19 of "Bugs and Improvements" about IsLoading for InLine.
+ if ( IsComputingNode() || IsFactoryNode() )
IsLoading( true ) ;
// ThreadNo( pthread_self() ) ;
MESSAGE(pthread_self() << "Executor::InNode::DataReady_ExecuteAction of " << Name()
<< " ControlState " << Automaton()->ControlStateName( ControlState() )
<< " BEFORE execution ThreadNo " << ThreadNo() ) ;
- IsLoading( false ) ;
Err = true ;
}
else {
bool StsPyDynInvoke = true;
_OutNode->PyThreadLock() ;
SetPyCpuUsed() ;
- IsLoading( false ); // loading complete for InLine nodes. For Computing and Factory - there still
- // is some work to be done.. IsLoading( false ) for them is called later just before
- // calling DynInvoke().. but for InLine PyDynInvoke() is called just right here below..
try {
// if ( IsInLineNode() && (*InLineNode()->PythonFunction()).length() &&
bool CopyInOut = false ;
}
catch( ... ) {
cdebug << "DynInvoke setProperties catched ERROR" << endl ;
- Err = true ;
+ Err = true;
}
}
if ( !Err && IsComputingNode() ) {
&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 "
}
}
}
-// 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 ) {