Skip to content

Commit c808e91

Browse files
authored
Merge pull request #1154 from jphickey/fix-1020-sb-buffers
Fix #1020, refactor SB buffer descriptor object
2 parents 672b2dc + cc1d984 commit c808e91

File tree

8 files changed

+688
-450
lines changed

8 files changed

+688
-450
lines changed

fsw/cfe-core/src/inc/cfe_sb.h

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,10 @@ typedef uint8 *CFE_SB_MsgPayloadPtr_t;
177177
**
178178
** Software Zero Copy handle used in many SB APIs
179179
*/
180-
typedef cpuaddr CFE_SB_ZeroCopyHandle_t;
180+
typedef struct
181+
{
182+
struct CFE_SB_BufferD* BufDscPtr; /* abstract descriptor reference (internal use) */
183+
} CFE_SB_ZeroCopyHandle_t;
181184

182185
/** \brief Quality Of Service Type Definition
183186
**
@@ -739,14 +742,14 @@ CFE_SB_Buffer_t *CFE_SB_ZeroCopyGetPtr(size_t MsgSize,
739742
** pointer returned by a call to #CFE_SB_ZeroCopyGetPtr,
740743
** but never used in a call to #CFE_SB_TransmitBuffer.
741744
**
742-
** \param[in] BufferHandle This must be the handle supplied with the pointer
743-
** when #CFE_SB_ZeroCopyGetPtr was called.
745+
** \param[in] ZeroCopyHandle This must be the handle supplied with the pointer
746+
** when #CFE_SB_ZeroCopyGetPtr was called.
744747
**
745748
** \return Execution status, see \ref CFEReturnCodes
746749
** \retval #CFE_SUCCESS \copybrief CFE_SUCCESS
747750
** \retval #CFE_SB_BUFFER_INVALID \copybrief CFE_SB_BUFFER_INVALID
748751
**/
749-
CFE_Status_t CFE_SB_ZeroCopyReleasePtr(CFE_SB_Buffer_t *Ptr2Release, CFE_SB_ZeroCopyHandle_t BufferHandle);
752+
CFE_Status_t CFE_SB_ZeroCopyReleasePtr(CFE_SB_Buffer_t *Ptr2Release, CFE_SB_ZeroCopyHandle_t ZeroCopyHandle);
750753

751754
/*****************************************************************************/
752755
/**
@@ -762,14 +765,19 @@ CFE_Status_t CFE_SB_ZeroCopyReleasePtr(CFE_SB_Buffer_t *Ptr2Release, CFE_SB_Zero
762765
** performance in high-rate, high-volume software bus traffic.
763766
**
764767
** \par Assumptions, External Events, and Notes:
765-
** -# The pointer returned by #CFE_SB_ZeroCopyGetPtr is only good for
766-
** one call to #CFE_SB_TransmitBuffer.
767-
** -# Callers must not use the same SB message buffer for multiple sends.
768+
** -# A handle returned by #CFE_SB_ZeroCopyGetPtr is "consumed" by
769+
** a _successful_ call to #CFE_SB_TransmitBuffer.
770+
** -# If this function returns CFE_SUCCESS, this indicates the zero copy handle is
771+
** now owned by software bus, and is no longer owned by the calling application,
772+
** and should not be re-used.
773+
** -# Howver if this function fails (returns any error status) it does not change
774+
** the state of the buffer at all, meaning the calling application still owns it.
775+
** (a failure means the buffer is left in the same state it was before the call).
768776
** -# Applications should be written as if #CFE_SB_ZeroCopyGetPtr is
769-
** equivalent to a \c malloc() and #CFE_SB_TransmitBuffer is equivalent
770-
** to a \c free().
777+
** equivalent to a \c malloc() and a successful call to #CFE_SB_TransmitBuffer
778+
** is equivalent to a \c free().
771779
** -# Applications must not de-reference the message pointer (for reading
772-
** or writing) after the call to #CFE_SB_TransmitBuffer.
780+
** or writing) after a successful call to #CFE_SB_TransmitBuffer.
773781
** -# This function will increment and apply the internally tracked
774782
** sequence counter if set to do so.
775783
**

0 commit comments

Comments
 (0)