From 59b04301996b88d1c810fbe89f5a6bf323b46bb8 Mon Sep 17 00:00:00 2001 From: Kamil Cudnik Date: Mon, 16 Mar 2020 20:37:09 +0100 Subject: [PATCH] [syncd] Unlock vendor api lock if enabling diag shell (#571) --- syncd/VendorSai.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/syncd/VendorSai.cpp b/syncd/VendorSai.cpp index f4bdb327e684..955e0ea7a0d6 100644 --- a/syncd/VendorSai.cpp +++ b/syncd/VendorSai.cpp @@ -190,7 +190,7 @@ sai_status_t VendorSai::set( _In_ sai_object_id_t objectId, _In_ const sai_attribute_t *attr) { - MUTEX(); + std::unique_lock _lock(m_apimutex); SWSS_LOG_ENTER(); VENDOR_CHECK_API_INITIALIZED(); @@ -222,6 +222,13 @@ sai_status_t VendorSai::set( sai_object_meta_key_t mk = { .objecttype = objectType, .objectkey = { .key = { .object_id = objectId } } }; + if (objectType == SAI_OBJECT_TYPE_SWITCH && attr && attr->id == SAI_SWITCH_ATTR_SWITCH_SHELL_ENABLE) + { + // in case of diagnostic shell, this vendor api can be blocking, so + // release lock here to not cause deadlock for other events in syncd + _lock.unlock(); + } + return info->set(&mk, attr); }