Fix message marker for src reset on send/rts 03/2603/2 3.2.5
authorE. Scott Daniels <daniels@research.att.com>
Wed, 26 Feb 2020 19:28:54 +0000 (14:28 -0500)
committerE. Scott Daniels <daniels@research.att.com>
Wed, 26 Feb 2020 20:13:58 +0000 (15:13 -0500)
The SI95 receive function was not properly causing a
message buffer to be marked as "receive generated" and
if the msg buffer was subsequently used to send a message
(e.g. return to sender) the correct source address was
not placed into the message before sending.  This change
ensures that the message buffer received via SI95 are
marked so that a send will set the source address when
needed.

Issue-ID: RIC-227

Signed-off-by: E. Scott Daniels <daniels@research.att.com>
Change-Id: Ic9c49834e5f066420463fa4568cfdf6f722f81cb

CHANGES
CMakeLists.txt
src/rmr/si/src/rmr_si.c

diff --git a/CHANGES b/CHANGES
index 795f4ed..40dad93 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,11 @@
 API and build change  and fix summaries. Doc correctsions
 and/or changes are not mentioned here; see the commit messages.
 
+2020 February 26; version 3.2.5
+       Fix source address bug in SI95 receive/send funcitons.
+       Fix threading issues involving session disconnection in SI95
+       Remove unused SI95 status variable.
+
 2020 February 24; version 3.2.4
        Fix meid bug (RIC-220) causing core dump.
 
index a7276bb..03a441e 100644 (file)
@@ -38,7 +38,7 @@ cmake_minimum_required( VERSION 3.5 )
 
 set( major_version "3" )               # should be automatically populated from git tag later, but until CI process sets a tag we use this
 set( minor_version "2" )
-set( patch_level "4" )
+set( patch_level "5" )
 
 set( install_root "${CMAKE_INSTALL_PREFIX}" )
 set( install_inc "include/rmr" )
index 6be4ffb..fa46ad7 100644 (file)
@@ -700,7 +700,7 @@ static void* init(  char* uproto_port, int max_msg_size, int flags ) {
                                                                                                // finish all flag setting before threads to keep helgrind quiet
        ctx->flags |= CFL_MTC_ENABLED;                          // for SI threaded receiver is the only way
 
-       if( flags & FL_NOTHREAD ) {                                     // thread set to off; no rout table collector started (could be called by the rtc thread itself)
+       if( flags & RMRFL_NOTHREAD ) {                          // thread set to off; no route table collector started (could be called by the rtc thread itself)
                ctx->rtable = rt_clone_space( NULL, NULL, 0 );          // creates an empty route table so that wormholes still can be used
        } else {
                if( static_rtc ) {
@@ -875,6 +875,7 @@ extern rmr_mbuf_t* rmr_mt_rcv( void* vctx, rmr_mbuf_t* mbuf, int max_wait ) {
                        }
                }
 
+               mbuf->flags |= MFL_ADDSRC;               // turn on so if user app tries to send this buffer we reset src
                return mbuf;
        }
 
@@ -919,6 +920,7 @@ extern rmr_mbuf_t* rmr_mt_rcv( void* vctx, rmr_mbuf_t* mbuf, int max_wait ) {
                if( DEBUG ) rmr_vlog( RMR_VL_DEBUG, " mt_rcv extracting from normal ring\n" );
                if( (mbuf = (rmr_mbuf_t *) uta_ring_extract( ctx->mring )) != NULL ) {                  // pop if queued
                        mbuf->state = RMR_OK;
+                       mbuf->flags |= MFL_ADDSRC;               // turn on so if user app tries to send this buffer we reset src
 
                        if( ombuf ) {
                                rmr_free_msg( ombuf );                                  // we cannot reuse as mbufs are queued on the ring