summaryrefslogtreecommitdiffstats
path: root/src/usr/initservice/baseinitsvc/initservice.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/initservice/baseinitsvc/initservice.C')
-rw-r--r--src/usr/initservice/baseinitsvc/initservice.C83
1 files changed, 76 insertions, 7 deletions
diff --git a/src/usr/initservice/baseinitsvc/initservice.C b/src/usr/initservice/baseinitsvc/initservice.C
index 0c3617023..de96ea922 100644
--- a/src/usr/initservice/baseinitsvc/initservice.C
+++ b/src/usr/initservice/baseinitsvc/initservice.C
@@ -65,14 +65,9 @@ errlHndl_t InitService::startTask( const TaskInfo *i_ptask,
assert(i_ptask->taskflags.task_type == START_TASK);
tidrc = task_exec( i_ptask->taskname, io_pargs ); // launch the child
-
- if ( io_pargs )
- {
- io_pargs->waitParentSync(); // sync up childtask
- }
-
if ( static_cast<int16_t>(tidrc) < 0 )
{
+ // task failed to launch, post an errorlog and dump some trace
io_rerrl = new ERRORLOG::ErrlEntry(
ERRORLOG::ERRL_SEV_CRITICAL_SYS_TERM, // severity
i_ptask->taskflags.module_id, // moduleid
@@ -91,6 +86,7 @@ errlHndl_t InitService::startTask( const TaskInfo *i_ptask,
} // endif tidrc
else
{
+ // task launched OK.
TRACDBIN( g_trac_initsvc,
"Task finished OK :",
i_ptask->taskname,
@@ -98,12 +94,85 @@ errlHndl_t InitService::startTask( const TaskInfo *i_ptask,
TRACDCOMP( g_trac_initsvc,
"task number %d, errlog p = %p",
tidrc, io_rerrl );
- }
+
+ if ( io_pargs )
+ {
+ io_pargs->waitParentSync(); // sync up childtask
+ }
+
+ }
return io_rerrl;
}
+errlHndl_t InitService::executeFn( const TaskInfo *i_ptask,
+ TaskArgs *io_pargs
+) const
+{
+ tid_t tidrc = 0;
+ errlHndl_t errl = NULL;
+
+ if ( i_ptask->taskfn == NULL )
+ {
+ TRACDBIN( g_trac_initsvc,
+ "ERROR: NULL function pointer:",
+ i_ptask->taskname,
+ strlen(i_ptask->taskname) );
+
+ errl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_CRITICAL_SYS_TERM, // severity
+ i_ptask->taskflags.module_id, // moduleid
+ INITSERVICE::NULL_FN_PTR, // reason Code
+ 0,
+ 0 );
+
+ return errl;
+ }
+
+
+ // valid function, launch it
+ tidrc = task_create( i_ptask->taskfn, io_pargs );
+ if ( static_cast<int16_t>(tidrc) < 0 )
+ {
+ errl = new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_CRITICAL_SYS_TERM, // severity
+ i_ptask->taskflags.module_id, // moduleid
+ INITSERVICE::START_FN_FAILED, // reason Code
+ tidrc, // user1 = tidrc
+ 0 );
+
+ TRACDBIN( g_trac_initsvc,
+ ENTER_MRK "ERROR starting function:",
+ i_ptask->taskname,
+ strlen(i_ptask->taskname) );
+ TRACDCOMP( g_trac_initsvc,
+ EXIT_MRK "tidrc=%d, errlog p = %p" ,
+ (int16_t)tidrc, errl );
+
+ } // endif tidrc
+ else
+ {
+ TRACDBIN( g_trac_initsvc,
+ ENTER_MRK "function launched OK :",
+ i_ptask->taskname,
+ strlen(i_ptask->taskname) );
+ TRACDCOMP( g_trac_initsvc,
+ EXIT_MRK "task number %d, errlog p = %p",
+ tidrc, errl );
+
+ // task launched OK.
+ if ( io_pargs )
+ {
+ io_pargs->waitParentSync(); // sync up parent task
+ }
+ }
+
+ return errl;
+
+}
+
+
void InitService::reportError(errlHndl_t &io_rerrl ) const
{
OpenPOWER on IntegriCloud