]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Limit mutex for obuf to when we access obuf
authorDonald Sharp <sharpd@nvidia.com>
Fri, 31 Jan 2025 17:12:17 +0000 (12:12 -0500)
committerDonald Sharp <sharpd@nvidia.com>
Fri, 31 Jan 2025 20:05:40 +0000 (15:05 -0500)
The mutex that wraps access to the output buffer
is being held for the entire time the data is
being generated to send down the pipe.  Since
the generation has absolutely nothing to do
with the obuf, let's limit the mutex holding some.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
zebra/dplane_fpm_nl.c

index a65bae95c42130a752edbd83929cbd377285154c..9f26852d1f5bb5ff9af96b0b7602f06c7c3f077b 100644 (file)
@@ -951,8 +951,6 @@ static int fpm_nl_enqueue(struct fpm_nl_ctx *fnc, struct zebra_dplane_ctx *ctx)
 
        nl_buf_len = 0;
 
-       frr_mutex_lock_autounlock(&fnc->obuf_mutex);
-
        /*
         * If route replace is enabled then directly encode the install which
         * is going to use `NLM_F_REPLACE` (instead of delete/add operations).
@@ -1105,6 +1103,8 @@ static int fpm_nl_enqueue(struct fpm_nl_ctx *fnc, struct zebra_dplane_ctx *ctx)
        /* We must know if someday a message goes beyond 65KiB. */
        assert((nl_buf_len + FPM_HEADER_SIZE) <= UINT16_MAX);
 
+       frr_mutex_lock_autounlock(&fnc->obuf_mutex);
+
        /* Check if we have enough buffer space. */
        if (STREAM_WRITEABLE(fnc->obuf) < (nl_buf_len + FPM_HEADER_SIZE)) {
                atomic_fetch_add_explicit(&fnc->counters.buffer_full, 1,