]> git.proxmox.com Git - mirror_frr.git/commitdiff
bgpd: update last_update whenever obuf sent
authorLou Berger <lberger@labn.net>
Sun, 7 Jan 2018 14:41:53 +0000 (09:41 -0500)
committerLou Berger <lberger@labn.net>
Mon, 22 Jan 2018 20:19:15 +0000 (15:19 -0500)
      (to be consistent with last_write updates)

Signed-off-by: Lou Berger <lberger@labn.net>
bgpd/bgp_io.c

index 98a8ec6e02cb959031e2502c5a343d57925504b6..f4bfc90b7e37adb8b7e0c719b6d736cfc95e0479 100644 (file)
@@ -375,14 +375,10 @@ static uint16_t bgp_write(struct peer *peer)
        int num;
        int update_last_write = 0;
        unsigned int count = 0;
-       uint32_t oc;
-       uint32_t uo;
+       uint32_t uo = 0;
        uint16_t status = 0;
        uint32_t wpkt_quanta_old;
 
-       // save current # updates sent
-       oc = atomic_load_explicit(&peer->update_out, memory_order_relaxed);
-
        // cache current write quanta
        wpkt_quanta_old =
            atomic_load_explicit(&peer->bgp->wpkt_quanta, memory_order_relaxed);
@@ -419,6 +415,7 @@ static uint16_t bgp_write(struct peer *peer)
                case BGP_MSG_UPDATE:
                        atomic_fetch_add_explicit(&peer->update_out, 1,
                                                  memory_order_relaxed);
+                       uo++;
                        break;
                case BGP_MSG_NOTIFY:
                        atomic_fetch_add_explicit(&peer->notify_out, 1,
@@ -457,9 +454,12 @@ static uint16_t bgp_write(struct peer *peer)
        }
 
 done : {
-       /* Update last_update if UPDATEs were written. */
-       uo = atomic_load_explicit(&peer->update_out, memory_order_relaxed);
-       if (uo > oc)
+       /*
+        * Update last_update if UPDATEs were written.
+        * Note: that these are only updated at end,
+        *       not per message (i.e., per loop)
+        */
+       if (uo)
                atomic_store_explicit(&peer->last_update, bgp_clock(),
                                      memory_order_relaxed);