X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Frmr%2Fcommon%2Fsrc%2Frtc_static.c;h=15fe56720f016622fa7097a765715959fc5baa0c;hb=05850e0815095c029ecff43ac8e0983f2fba4fb6;hp=e92e53d7a82ec8b8f4717f30b81a780f6ef14ec5;hpb=9c923bcc9322c22220b574671c7b46f10008c614;p=ric-plt%2Flib%2Frmr.git diff --git a/src/rmr/common/src/rtc_static.c b/src/rmr/common/src/rtc_static.c index e92e53d..15fe567 100644 --- a/src/rmr/common/src/rtc_static.c +++ b/src/rmr/common/src/rtc_static.c @@ -76,15 +76,18 @@ static void* rtc_file( void* vctx ) { ctx->flags |= CFL_NO_RTACK; // no attempt to ack when reading from a file while( 1 ) { if( vfd >= 0 ) { - wbuf[0] = 0; - lseek( vfd, 0, 0 ); - read( vfd, wbuf, 10 ); - vlevel = atoi( wbuf ); + memset( wbuf, 0, sizeof( char ) * 11 ); + if( lseek( vfd, 0, SEEK_SET ) == 0 && read( vfd, wbuf, 10 ) > 0 ) { + vlevel = atoi( wbuf ); + } } read_static_rt( ctx, vlevel ); // seed the route table if one provided if( ctx->shutdown != 0 ) { // allow for graceful termination and unit testing + if( vfd >= 0 ) { + close( vfd ); + } return NULL; } sleep( 60 ); @@ -97,9 +100,10 @@ static int refresh_vlevel( int vfd ) { if( vfd >= 0 ) { // if file is open, read current value rbuf[0] = 0; - lseek( vfd, 0, 0 ); - read( vfd, rbuf, 10 ); - vlevel = atoi( rbuf ); + memset( rbuf, 0, sizeof( char ) * 11 ); + if( lseek( vfd, 0, SEEK_SET ) == 0 && read( vfd, rbuf, 10 ) > 0 ) { + vlevel = atoi( rbuf ); + } } return vlevel; @@ -270,6 +274,11 @@ static void* rtc( void* vctx ) { return NULL; } + if( (ctx->ephash = rmr_sym_alloc( RT_SIZE )) == NULL ) { // master hash table for endpoints (each rt will reference this) + rmr_vlog( RMR_VL_CRIT, "rmr_rtc: internal mishap: unable to allocate an endpoint hash table\n" ); + return NULL; + } + if( (eptr = getenv( ENV_VERBOSE_FILE )) != NULL ) { vfd = open( eptr, O_RDONLY ); vlevel = refresh_vlevel( vfd ); @@ -279,7 +288,7 @@ static void* rtc( void* vctx ) { rt_req_freq = atoi( eptr ); if( rt_req_freq < 1 || rt_req_freq > 300 ) { rt_req_freq = DEF_RTREQ_FREQ; - rmr_vlog( RMR_VL_WARN, "rmr_rtc: RT request frequency (%s) out of range (1-300), using default", DEF_RTREQ_FREQ ); + rmr_vlog( RMR_VL_WARN, "rmr_rtc: RT request frequency (%d) out of range (1-300), using default", DEF_RTREQ_FREQ ); } } rmr_vlog( RMR_VL_INFO, "rmr_rtc: RT request frequency set to: %d seconds", rt_req_freq );