diff --git a/net/link_manager/dap_link_manager.c b/net/link_manager/dap_link_manager.c
index c501d3ffef65c1210452782450d4256b86b46269..c6f66087a985f7fad370592fae4cb97088c98b6e 100644
--- a/net/link_manager/dap_link_manager.c
+++ b/net/link_manager/dap_link_manager.c
@@ -245,7 +245,8 @@ void dap_link_manager_deinit()
     DL_FOREACH_SAFE(s_link_manager->nets, it, tmp)
         dap_link_manager_remove_net(((dap_managed_net_t *)it->data)->id);
     pthread_rwlock_destroy(&s_link_manager->links_lock);
-    DAP_DEL_Z(s_link_manager);
+    pthread_rwlock_destroy(&s_link_manager->nets_lock);
+    DAP_DELETE(s_link_manager);
 }
 
 /**
@@ -263,6 +264,7 @@ dap_link_manager_t *dap_link_manager_new(const dap_link_manager_callbacks_t *a_c
     l_ret->max_attempts_num = s_max_attempts_num;
     l_ret->reconnect_delay = s_reconnect_delay;
     pthread_rwlock_init(&l_ret->links_lock, NULL);
+    pthread_rwlock_init(&l_ret->nets_lock, NULL);
     return l_ret;
 }
 
@@ -331,6 +333,7 @@ int dap_link_manager_add_net(uint64_t a_net_id, dap_cluster_t *a_link_cluster, u
 {
     dap_return_val_if_pass(!s_link_manager || !a_net_id || !a_link_cluster, -2);
     dap_list_t *l_item = NULL;
+    pthread_rwlock_wrlock(&s_link_manager->nets_lock);
     DL_FOREACH(s_link_manager->nets, l_item) {
         if (a_net_id == ((dap_managed_net_t *)(l_item->data))->id) {
             log_it(L_ERROR, "Net ID 0x%016" DAP_UINT64_FORMAT_x " already managed", a_net_id);
@@ -342,6 +345,7 @@ int dap_link_manager_add_net(uint64_t a_net_id, dap_cluster_t *a_link_cluster, u
     l_net->min_links_num = a_min_links_number;
     l_net->link_clusters = dap_list_append(l_net->link_clusters, a_link_cluster);
     s_link_manager->nets = dap_list_append(s_link_manager->nets, (void *)l_net);
+    pthread_rwlock_unlock(&s_link_manager->nets_lock);
     return 0;
 }
 
diff --git a/net/link_manager/include/dap_link_manager.h b/net/link_manager/include/dap_link_manager.h
index 6e44860c5b58f19d46cebed981ffca078667e4b8..04d40e0da110f729d2ec33780db817a797108158 100644
--- a/net/link_manager/include/dap_link_manager.h
+++ b/net/link_manager/include/dap_link_manager.h
@@ -83,6 +83,7 @@ typedef struct dap_link_manager {
     dap_list_t *nets;           // managed nets list
     dap_link_t *links;          // links HASH_TAB
     pthread_rwlock_t links_lock;
+    pthread_rwlock_t nets_lock;
     dap_link_manager_callbacks_t callbacks;  // callbacks
 } dap_link_manager_t;