Make sure all events for logical device are sent before its deletion to avoid race conditions

Change-Id: I5fcbc8e2c176cf866f8e7f68d1da777d6f0b573c
diff --git a/rw_core/core/device/logical_agent.go b/rw_core/core/device/logical_agent.go
index d168bf3..6b0b6f7 100644
--- a/rw_core/core/device/logical_agent.go
+++ b/rw_core/core/device/logical_agent.go
@@ -191,7 +191,13 @@
 			return
 		}
 		defer agent.requestQueue.RequestComplete()
-
+		subCtx, cancel := context.WithTimeout(log.WithSpanFromContext(context.Background(), ctx), agent.defaultTimeout)
+		// Before deletion of the logical agent, make sure all events for ldagent are sent to avoid race conditions
+		if err := agent.orderedEvents.waitForAllEventsToBeSent(subCtx, cancel); err != nil {
+			//Log the error here
+			logger.Errorw(ctx, "failed-to-send-all-events-on-the-logical-device-before-deletion",
+				log.Fields{"error": err, "logical-device-id": agent.logicalDeviceID})
+		}
 		//Remove the logical device from the model
 		if err := agent.ldProxy.Remove(ctx, agent.logicalDeviceID); err != nil {
 			returnErr = err