]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/zebra_rib.c
Merge pull request #4869 from rtrlib/2019-08-22-bugfix-master
[mirror_frr.git] / zebra / zebra_rib.c
index 3608b887ee4b8683cf76705cf3283771a3c870be..a7058e7928a005c2a0f595541b578896131fe397 100644 (file)
@@ -37,6 +37,7 @@
 #include "vrf.h"
 #include "workqueue.h"
 #include "nexthop_group_private.h"
+#include "frr_pthread.h"
 
 #include "zebra/zebra_router.h"
 #include "zebra/connected.h"
@@ -3178,7 +3179,7 @@ static int handle_pw_result(struct zebra_dplane_ctx *ctx)
 
        if (dplane_ctx_get_status(ctx) != ZEBRA_DPLANE_REQUEST_SUCCESS) {
                vrf = zebra_vrf_lookup_by_id(dplane_ctx_get_vrf(ctx));
-               pw = zebra_pw_find(vrf, dplane_ctx_get_pw_ifname(ctx));
+               pw = zebra_pw_find(vrf, dplane_ctx_get_ifname(ctx));
                if (pw)
                        zebra_pw_install_failure(pw);
        }
@@ -3204,12 +3205,10 @@ static int rib_process_dplane_results(struct thread *thread)
                TAILQ_INIT(&ctxlist);
 
                /* Take lock controlling queue of results */
-               pthread_mutex_lock(&dplane_mutex);
-               {
+               frr_with_mutex(&dplane_mutex) {
                        /* Dequeue list of context structs */
                        dplane_ctx_list_append(&ctxlist, &rib_dplane_q);
                }
-               pthread_mutex_unlock(&dplane_mutex);
 
                /* Dequeue context block */
                ctx = dplane_ctx_dequeue(&ctxlist);
@@ -3270,6 +3269,11 @@ static int rib_process_dplane_results(struct thread *thread)
                                dplane_ctx_fini(&ctx);
                                break;
 
+                       case DPLANE_OP_MAC_INSTALL:
+                       case DPLANE_OP_MAC_DELETE:
+                               zebra_vxlan_handle_result(ctx);
+                               break;
+
                        default:
                                /* Don't expect this: just return the struct? */
                                dplane_ctx_fini(&ctx);
@@ -3295,12 +3299,10 @@ static int rib_process_dplane_results(struct thread *thread)
 static int rib_dplane_results(struct dplane_ctx_q *ctxlist)
 {
        /* Take lock controlling queue of results */
-       pthread_mutex_lock(&dplane_mutex);
-       {
+       frr_with_mutex(&dplane_mutex) {
                /* Enqueue context blocks */
                dplane_ctx_list_append(&rib_dplane_q, ctxlist);
        }
-       pthread_mutex_unlock(&dplane_mutex);
 
        /* Ensure event is signalled to zebra main pthread */
        thread_add_event(zrouter.master, rib_process_dplane_results, NULL, 0,