diff --git a/fsw/cfe-core/src/inc/private/cfe_sbr.h b/fsw/cfe-core/src/inc/private/cfe_sbr.h index de0123bd7..63d00d2ba 100644 --- a/fsw/cfe-core/src/inc/private/cfe_sbr.h +++ b/fsw/cfe-core/src/inc/private/cfe_sbr.h @@ -38,6 +38,13 @@ #include "cfe_msg_typedefs.h" #include "cfe_platform_cfg.h" +/* + * Macro Definitions + */ + +/** \brief Invalid route id */ +#define CFE_SBR_INVALID_ROUTE_ID ((CFE_SBR_RouteId_t) {.RouteId = 0}) + /****************************************************************************** * Type Definitions */ diff --git a/fsw/cfe-core/src/sb/cfe_sb_api.c b/fsw/cfe-core/src/sb/cfe_sb_api.c index 527750359..ba2eff5af 100644 --- a/fsw/cfe-core/src/sb/cfe_sb_api.c +++ b/fsw/cfe-core/src/sb/cfe_sb_api.c @@ -1397,6 +1397,7 @@ int32 CFE_SB_TransmitMsg(CFE_MSG_Message_t *MsgPtr, bool IncrementSequenceCount PendingEventID = 0; BufDscPtr = NULL; + RouteId = CFE_SBR_INVALID_ROUTE_ID; Status = CFE_SB_TransmitMsgValidate(MsgPtr, &MsgId, &Size, &RouteId); @@ -1886,6 +1887,7 @@ int32 CFE_SB_ReceiveBuffer(CFE_SB_Buffer_t **BufPtr, BufDscPtr = NULL; DestPtr = NULL; BufDscSize = 0; + RcvStatus = OS_SUCCESS; /* * Check input args and see if any are bad, which require diff --git a/fsw/cfe-core/src/sb/cfe_sb_priv.c b/fsw/cfe-core/src/sb/cfe_sb_priv.c index 047fd0c81..fa478e631 100644 --- a/fsw/cfe-core/src/sb/cfe_sb_priv.c +++ b/fsw/cfe-core/src/sb/cfe_sb_priv.c @@ -536,15 +536,7 @@ void CFE_SB_RemoveDestNode(CFE_SBR_RouteId_t RouteId, CFE_SB_DestinationD_t *Nod int32 CFE_SB_ZeroCopyReleaseAppId(CFE_ES_AppId_t AppId) { CFE_SB_BufferLink_t *NextLink; - - /* Using a union type permits promotion of CFE_SB_BufferLink_t* to CFE_SB_BufferD_t* - * without violating aliasing rules or alignment rules. Note that the first element - * of CFE_SB_BufferD_t is a CFE_SB_BufferLink_t, which makes this possible. */ - union LocalBufDesc - { - CFE_SB_BufferLink_t As_Link; - CFE_SB_BufferD_t As_Dsc; - } *BufPtr; + CFE_SB_BufferD_t *DscPtr; /* * First go through the "ZeroCopy" tracking list and find all nodes @@ -560,16 +552,18 @@ int32 CFE_SB_ZeroCopyReleaseAppId(CFE_ES_AppId_t AppId) while(!CFE_SB_TrackingListIsEnd(&CFE_SB_Global.ZeroCopyList, NextLink)) { /* Get buffer descriptor pointer */ - BufPtr = (union LocalBufDesc*)NextLink; + /* NOTE: casting via void* here rather than CFE_SB_BufferD_t* avoids a false + * alignment warning on platforms with strict alignment requirements */ + DscPtr = (void *)NextLink; /* Read the next link now in case this node gets moved */ NextLink = CFE_SB_TrackingListGetNext(NextLink); /* Check if it is a zero-copy buffer owned by this app */ - if (CFE_RESOURCEID_TEST_EQUAL(BufPtr->As_Dsc.AppId, AppId)) + if (CFE_RESOURCEID_TEST_EQUAL(DscPtr->AppId, AppId)) { /* If so, decrement the use count as the app has now gone away */ - CFE_SB_DecrBufUseCnt(&BufPtr->As_Dsc); + CFE_SB_DecrBufUseCnt(DscPtr); } } diff --git a/modules/sbr/private_inc/cfe_sbr_priv.h b/modules/sbr/private_inc/cfe_sbr_priv.h index 3d0fcce59..ecabbb6bb 100644 --- a/modules/sbr/private_inc/cfe_sbr_priv.h +++ b/modules/sbr/private_inc/cfe_sbr_priv.h @@ -31,12 +31,6 @@ */ #include "private/cfe_sbr.h" -/* - * Macro Definitions - */ - -/** \brief Invalid route id */ -#define CFE_SBR_INVALID_ROUTE_ID ((CFE_SBR_RouteId_t) {.RouteId = 0}) /****************************************************************************** * Function prototypes