From 9a31c26fd7018916674bcb0fe6d9e65536f9ec29 Mon Sep 17 00:00:00 2001 From: Joseph Hickey Date: Wed, 14 Oct 2020 10:36:43 -0400 Subject: [PATCH] Fix #502, remove extra copy of task name There is no need to store the main task name a second time in the app record, as it is already stored in the task record. --- fsw/cfe-core/src/es/cfe_es_api.c | 6 +++--- fsw/cfe-core/src/es/cfe_es_apps.c | 29 ++++++++++++----------------- fsw/cfe-core/src/es/cfe_es_apps.h | 14 +------------- fsw/cfe-core/src/es/cfe_es_start.c | 16 +++++----------- fsw/cfe-core/unit-test/es_UT.c | 6 +++--- 5 files changed, 24 insertions(+), 47 deletions(-) diff --git a/fsw/cfe-core/src/es/cfe_es_api.c b/fsw/cfe-core/src/es/cfe_es_api.c index 3b3ad0393..22cbbe1e5 100644 --- a/fsw/cfe-core/src/es/cfe_es_api.c +++ b/fsw/cfe-core/src/es/cfe_es_api.c @@ -1116,7 +1116,7 @@ int32 CFE_ES_CreateChildTask(CFE_ES_ResourceID_t *TaskIdPtr, */ OsalId = OS_TaskGetId(); TaskId = CFE_ES_ResourceID_FromOSAL(OsalId); - ParentTaskId = AppRecPtr->TaskInfo.MainTaskId; + ParentTaskId = AppRecPtr->MainTaskId; if ( CFE_ES_ResourceID_Equal(TaskId, ParentTaskId) ) { /* @@ -1279,7 +1279,7 @@ int32 CFE_ES_DeleteChildTask(CFE_ES_ResourceID_t TaskId) { if ( CFE_ES_AppRecordIsUsed(AppRecPtr) ) { - if ( CFE_ES_ResourceID_Equal(AppRecPtr->TaskInfo.MainTaskId, TaskId) ) + if ( CFE_ES_ResourceID_Equal(AppRecPtr->MainTaskId, TaskId) ) { /* ** Error, the task Id is an App Main Task ID @@ -1381,7 +1381,7 @@ void CFE_ES_ExitChildTask(void) AppRecPtr = CFE_ES_LocateAppRecordByID(TaskRecPtr->AppId); if ( CFE_ES_AppRecordIsMatch(AppRecPtr, TaskRecPtr->AppId) && - !CFE_ES_TaskRecordIsMatch(TaskRecPtr, AppRecPtr->TaskInfo.MainTaskId)) + !CFE_ES_TaskRecordIsMatch(TaskRecPtr, AppRecPtr->MainTaskId)) { /* ** Invalidate the task table entry diff --git a/fsw/cfe-core/src/es/cfe_es_apps.c b/fsw/cfe-core/src/es/cfe_es_apps.c index 1cba0620a..d64fab582 100644 --- a/fsw/cfe-core/src/es/cfe_es_apps.c +++ b/fsw/cfe-core/src/es/cfe_es_apps.c @@ -512,12 +512,6 @@ int32 CFE_ES_AppCreate(CFE_ES_ResourceID_t *ApplicationIdPtr, AppRecPtr->StartParams.ExceptionAction = ExceptionAction; AppRecPtr->StartParams.Priority = Priority; - /* - ** Fill out the Task Info - */ - strncpy((char *)AppRecPtr->TaskInfo.MainTaskName, AppName, OS_MAX_API_NAME); - AppRecPtr->TaskInfo.MainTaskName[OS_MAX_API_NAME - 1] = '\0'; - /* ** Fill out the Task State info */ @@ -552,18 +546,19 @@ int32 CFE_ES_AppCreate(CFE_ES_ResourceID_t *ApplicationIdPtr, /* ** Record the ES_TaskTable entry */ - AppRecPtr->TaskInfo.MainTaskId = CFE_ES_ResourceID_FromOSAL(MainTaskId); - TaskRecPtr = CFE_ES_LocateTaskRecordByID(AppRecPtr->TaskInfo.MainTaskId); + AppRecPtr->MainTaskId = CFE_ES_ResourceID_FromOSAL(MainTaskId); + TaskRecPtr = CFE_ES_LocateTaskRecordByID(AppRecPtr->MainTaskId); if ( CFE_ES_TaskRecordIsUsed(TaskRecPtr) ) { CFE_ES_SysLogWrite_Unsync("ES Startup: Error: ES_TaskTable slot in use at task creation!\n"); } - CFE_ES_TaskRecordSetUsed(TaskRecPtr,AppRecPtr->TaskInfo.MainTaskId); + CFE_ES_TaskRecordSetUsed(TaskRecPtr,AppRecPtr->MainTaskId); TaskRecPtr->AppId = PendingAppId; - strncpy((char *)TaskRecPtr->TaskName, - (char *)AppRecPtr->TaskInfo.MainTaskName,OS_MAX_API_NAME ); - TaskRecPtr->TaskName[OS_MAX_API_NAME - 1]='\0'; + /* The main task name is the same as the app name */ + strncpy(TaskRecPtr->TaskName, AppName, + sizeof(TaskRecPtr->TaskName)-1); + TaskRecPtr->TaskName[sizeof(TaskRecPtr->TaskName)-1]='\0'; CFE_ES_AppRecordSetUsed(AppRecPtr, PendingAppId); CFE_ES_SysLogWrite_Unsync("ES Startup: %s loaded and created\n", AppName); *ApplicationIdPtr = PendingAppId; @@ -1174,7 +1169,7 @@ int32 CFE_ES_CleanUpApp(CFE_ES_AppRecord_t *AppRecPtr) /* ** Get Main Task ID */ - MainTaskId = AppRecPtr->TaskInfo.MainTaskId; + MainTaskId = AppRecPtr->MainTaskId; /* ** Delete any child tasks associated with this app @@ -1517,10 +1512,7 @@ int32 CFE_ES_GetAppInfoInternal(CFE_ES_AppRecord_t *AppRecPtr, CFE_ES_AppInfo_t AppInfoPtr->ExceptionAction = AppRecPtr->StartParams.ExceptionAction; AppInfoPtr->Priority = AppRecPtr->StartParams.Priority; - AppInfoPtr->MainTaskId = AppRecPtr->TaskInfo.MainTaskId; - strncpy((char *)AppInfoPtr->MainTaskName, (char *)AppRecPtr->TaskInfo.MainTaskName, - sizeof(AppInfoPtr->MainTaskName) - 1); - AppInfoPtr->MainTaskName[sizeof(AppInfoPtr->MainTaskName) - 1] = '\0'; + AppInfoPtr->MainTaskId = AppRecPtr->MainTaskId; /* ** Calculate the number of child tasks @@ -1545,6 +1537,9 @@ int32 CFE_ES_GetAppInfoInternal(CFE_ES_AppRecord_t *AppRecPtr, CFE_ES_AppInfo_t if (CFE_ES_TaskRecordIsMatch(TaskRecPtr,AppInfoPtr->MainTaskId)) { AppInfoPtr->ExecutionCounter = TaskRecPtr->ExecutionCounter; + strncpy((char *)AppInfoPtr->MainTaskName, TaskRecPtr->TaskName, + sizeof(AppInfoPtr->MainTaskName) - 1); + AppInfoPtr->MainTaskName[sizeof(AppInfoPtr->MainTaskName) - 1] = '\0'; } /* diff --git a/fsw/cfe-core/src/es/cfe_es_apps.h b/fsw/cfe-core/src/es/cfe_es_apps.h index f4a0fbdb2..fa29774b4 100644 --- a/fsw/cfe-core/src/es/cfe_es_apps.h +++ b/fsw/cfe-core/src/es/cfe_es_apps.h @@ -83,18 +83,6 @@ typedef struct } CFE_ES_AppStartParams_t; -/* -** CFE_ES_MainTaskInfo_t is a structure of information about the main -** task and child tasks in a cFE application. This structure is just used in the -** cFE_ES_AppRecord_t structure. -*/ -typedef struct -{ - CFE_ES_ResourceID_t MainTaskId; /* The Application's Main Task ID */ - char MainTaskName[OS_MAX_API_NAME]; /* The Application's Main Task ID */ -} CFE_ES_MainTaskInfo_t; - - /* ** CFE_ES_AppRecord_t is an internal structure used to keep track of ** CFE Applications that are active in the system. @@ -106,7 +94,7 @@ typedef struct uint32 Type; /* The type of App: CORE or EXTERNAL */ CFE_ES_AppStartParams_t StartParams; /* The start parameters for an App */ CFE_ES_ControlReq_t ControlReq; /* The Control Request Record for External cFE Apps */ - CFE_ES_MainTaskInfo_t TaskInfo; /* Information about the Tasks */ + CFE_ES_ResourceID_t MainTaskId; /* The Application's Main Task ID */ } CFE_ES_AppRecord_t; diff --git a/fsw/cfe-core/src/es/cfe_es_start.c b/fsw/cfe-core/src/es/cfe_es_start.c index 269ace225..e4b3f206e 100644 --- a/fsw/cfe-core/src/es/cfe_es_start.c +++ b/fsw/cfe-core/src/es/cfe_es_start.c @@ -804,12 +804,6 @@ void CFE_ES_CreateObjects(void) AppRecPtr->StartParams.Priority = CFE_ES_ObjectTable[i].ObjectPriority; - /* - ** Fill out the Task Info - */ - strncpy((char *)AppRecPtr->TaskInfo.MainTaskName, (char *)CFE_ES_ObjectTable[i].ObjectName, OS_MAX_API_NAME); - AppRecPtr->TaskInfo.MainTaskName[OS_MAX_API_NAME - 1] = '\0'; - /* ** Create the task */ @@ -842,8 +836,8 @@ void CFE_ES_CreateObjects(void) } else { - AppRecPtr->TaskInfo.MainTaskId = CFE_ES_ResourceID_FromOSAL(OsalId); - TaskRecPtr = CFE_ES_LocateTaskRecordByID(AppRecPtr->TaskInfo.MainTaskId); + AppRecPtr->MainTaskId = CFE_ES_ResourceID_FromOSAL(OsalId); + TaskRecPtr = CFE_ES_LocateTaskRecordByID(AppRecPtr->MainTaskId); /* ** Allocate and populate the CFE_ES_Global.TaskTable entry @@ -853,10 +847,10 @@ void CFE_ES_CreateObjects(void) CFE_ES_SysLogWrite_Unsync("ES Startup: CFE_ES_Global.TaskTable record used error for App: %s, continuing.\n", CFE_ES_ObjectTable[i].ObjectName); } - CFE_ES_TaskRecordSetUsed(TaskRecPtr, AppRecPtr->TaskInfo.MainTaskId); + CFE_ES_TaskRecordSetUsed(TaskRecPtr, AppRecPtr->MainTaskId); TaskRecPtr->AppId = CFE_ES_AppRecordGetID(AppRecPtr); - strncpy((char *)TaskRecPtr->TaskName, (char *)AppRecPtr->TaskInfo.MainTaskName, OS_MAX_API_NAME); - TaskRecPtr->TaskName[OS_MAX_API_NAME - 1] = '\0'; + strncpy(TaskRecPtr->TaskName, CFE_ES_ObjectTable[i].ObjectName, sizeof(TaskRecPtr->TaskName)-1); + TaskRecPtr->TaskName[sizeof(TaskRecPtr->TaskName)-1 - 1] = '\0'; CFE_ES_SysLogWrite_Unsync("ES Startup: Core App: %s created. App ID: %lu\n", CFE_ES_ObjectTable[i].ObjectName, diff --git a/fsw/cfe-core/unit-test/es_UT.c b/fsw/cfe-core/unit-test/es_UT.c index 365e5df5a..fe99f690e 100644 --- a/fsw/cfe-core/unit-test/es_UT.c +++ b/fsw/cfe-core/unit-test/es_UT.c @@ -272,7 +272,7 @@ void ES_UT_SetupSingleAppId(CFE_ES_AppType_Enum_t AppType, CFE_ES_AppState_Enum_ CFE_ES_TaskRecordSetUsed(LocalTaskPtr, UtTaskId); CFE_ES_AppRecordSetUsed(LocalAppPtr, UtAppId); LocalTaskPtr->AppId = UtAppId; - LocalAppPtr->TaskInfo.MainTaskId = UtTaskId; + LocalAppPtr->MainTaskId = UtTaskId; LocalAppPtr->AppState = AppState; LocalAppPtr->Type = AppType; @@ -2062,7 +2062,7 @@ void TestApps(void) ES_UT_SetupChildTaskId(UtAppRecPtr, NULL, NULL); /* switch the main task association (makes it wrong) */ - UtAppRecPtr->TaskInfo.MainTaskId = CFE_ES_TaskRecordGetID(UtTaskRecPtr); + UtAppRecPtr->MainTaskId = CFE_ES_TaskRecordGetID(UtTaskRecPtr); UT_SetForceFail(UT_KEY(OS_TaskDelete), OS_ERROR); UT_Report(__FILE__, __LINE__, @@ -2086,7 +2086,7 @@ void TestApps(void) ES_UT_SetupChildTaskId(UtAppRecPtr, NULL, NULL); /* switch the main task association (makes it wrong) */ - UtAppRecPtr->TaskInfo.MainTaskId = CFE_ES_TaskRecordGetID(UtTaskRecPtr); + UtAppRecPtr->MainTaskId = CFE_ES_TaskRecordGetID(UtTaskRecPtr); UT_Report(__FILE__, __LINE__, CFE_ES_CleanUpApp(UtAppRecPtr) == CFE_SUCCESS,