From 20829ec38b851e7894883ba6b1711ccf8d05c3f4 Mon Sep 17 00:00:00 2001 From: "E. Scott Daniels" Date: Wed, 26 Feb 2020 14:28:54 -0500 Subject: [PATCH] Fix message marker for src reset on send/rts 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 Change-Id: Ic9c49834e5f066420463fa4568cfdf6f722f81cb --- CHANGES | 5 +++++ CMakeLists.txt | 2 +- src/rmr/si/src/rmr_si.c | 4 +++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 795f4ed..40dad93 100644 --- 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. diff --git a/CMakeLists.txt b/CMakeLists.txt index a7276bb..03a441e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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" ) diff --git a/src/rmr/si/src/rmr_si.c b/src/rmr/si/src/rmr_si.c index 6be4ffb..fa46ad7 100644 --- a/src/rmr/si/src/rmr_si.c +++ b/src/rmr/si/src/rmr_si.c @@ -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 -- 2.16.6