Release RMR version 4.8.2
[ric-plt/lib/rmr.git] / src / rmr / common / src / rtc_static.c
index 96f8330..f29f65f 100644 (file)
@@ -268,6 +268,7 @@ static void* rtc( void* vctx ) {
        uta_ctx_t*      ctx;                                    // context user has -- where we pin the route table
        uta_ctx_t*      pvt_cx;                                 // private context for session with rtg
        rmr_mbuf_t*     msg = NULL;                             // message from rtg
+       route_table_t* rt;                                      // the routing table that will be traversed to print statistics
        char*   my_port;                                        // the port number that we will listen on (4561 has been the default for this)
        char*   rtg_addr;                                       // host:port address of route table generator (route manager)
        char*   daddr;                                          // duplicated rtg address string to parse/trash
@@ -310,6 +311,7 @@ static void* rtc( void* vctx ) {
        ctx->flags |= CFL_NO_RTACK;                             // don't ack when reading from a file
        read_static_rt( ctx, vlevel );                  // seed the route table if one provided
        ctx->flags &= ~CFL_NO_RTACK;
+       ctx->flags &= ~CFL_FULLRT;                              // even though rmr-ready goes true, the seed doesn't count as a full RT from route generator
 
 
        my_port = getenv( ENV_CTL_PORT );                               // default port to listen on (likely 4561)
@@ -384,7 +386,9 @@ static void* rtc( void* vctx ) {
                                        count_delay = 300;
                                }
                                if( vlevel >= 0 ) {                                                                             // allow it to be forced off with -n in verbose file
-                                       rt_epcounts( ctx->rtable, ctx->my_name );
+                                       rt = get_rt( ctx );                                                                     // get active route table and up ref count
+                                       rt_epcounts( rt, ctx->my_name );
+                                       release_rt( ctx, rt );                                                          // dec safely the ref counter
                                }
                        }
 
@@ -463,6 +467,7 @@ static void* raw_rtc( void* vctx ) {
        uta_ctx_t*      ctx;                                    // context user has -- where we pin the route table
        uta_ctx_t*      pvt_cx;                                 // private context for session with rtg
        rmr_mbuf_t*     msg = NULL;                             // message from rtg
+       route_table_t* rt;                                      // the routing table that will be traversed to print statistics
        char*   payload;                                        // payload in the message
        size_t  mlen;
        char*   port;                                           // a port number we listen/connect to
@@ -581,7 +586,9 @@ static void* raw_rtc( void* vctx ) {
                                        if( blabber > bump_freq ) {
                                                count_delay = 300;
                                        }
-                                       rt_epcounts( ctx->rtable, ctx->my_name );
+                                       rt = get_rt( ctx );                                                                     // get active route table and up ref count
+                                       rt_epcounts( rt, ctx->my_name );
+                                       release_rt( ctx, rt );                                                          // dec safely the ref counter
                                }
                        }