[VOL-5531] Onu adapter crash fix in sending omci requests

Change-Id: I50d05f6ab192c040458678bf9ed290257fa9b874
Signed-off-by: balaji.nagarajan <balaji.nagarajan@radisys.com>
diff --git a/internal/pkg/common/omci_cc.go b/internal/pkg/common/omci_cc.go
index 5fbe0e7..5984c3d 100755
--- a/internal/pkg/common/omci_cc.go
+++ b/internal/pkg/common/omci_cc.go
@@ -640,6 +640,14 @@
 func (oo *OmciCC) sendQueuedHighPrioRequests(ctx context.Context) error {
 	oo.mutexHighPrioTxQueue.Lock()
 	defer oo.mutexHighPrioTxQueue.Unlock()
+
+	if oo.pBaseDeviceHandler == nil {
+		logger.Warnw(ctx, "device handler is nil - abort sendQueuedHighPrioRequests", log.Fields{"device-id": oo.deviceID})
+		return nil
+	} else if oo.pBaseDeviceHandler.GetDeletionInProgress() {
+		logger.Warnw(ctx, "device deletion in progress - abort sendQueuedHighPrioRequests", log.Fields{"device-id": oo.deviceID})
+		return nil
+	}
 	for oo.highPrioTxQueue.Len() > 0 {
 		select {
 		case _, ok := <-oo.pBaseDeviceHandler.GetDeviceDeleteCommChan(ctx):
@@ -668,6 +676,15 @@
 
 func (oo *OmciCC) sendQueuedLowPrioRequests(ctx context.Context) error {
 	oo.mutexLowPrioTxQueue.Lock()
+
+	if oo.pBaseDeviceHandler == nil {
+		logger.Warnw(ctx, "device handler is nil - abort sendQueuedLowPrioRequests", log.Fields{"device-id": oo.deviceID})
+		return nil
+	} else if oo.pBaseDeviceHandler.GetDeletionInProgress() {
+		logger.Warnw(ctx, "device deletion in progress - abort sendQueuedLowPrioRequests", log.Fields{"device-id": oo.deviceID})
+		return nil
+	}
+
 	for oo.lowPrioTxQueue.Len() > 0 {
 		select {
 		case _, ok := <-oo.pBaseDeviceHandler.GetDeviceDeleteCommChan(ctx):
@@ -5048,6 +5065,13 @@
 	retryCounter := 0
 loop:
 	for retryCounter <= retries {
+		if oo.pBaseDeviceHandler == nil {
+			logger.Warnw(ctx, "pBaseDeviceHandler is nil - abort sendWithRxSupervision", log.Fields{"device-id": oo.deviceID})
+			break loop
+		} else if oo.pBaseDeviceHandler.GetDeletionInProgress() {
+			logger.Warnw(ctx, "device deletion in progress - abort sendWithRxSupervision", log.Fields{"device-id": oo.deviceID})
+			break loop
+		}
 		// enqueue
 		if aOmciTxRequest.highPrio {
 			oo.mutexHighPrioTxQueue.Lock()
diff --git a/internal/pkg/core/device_handler.go b/internal/pkg/core/device_handler.go
index cbb9acd..bba3f4a 100755
--- a/internal/pkg/core/device_handler.go
+++ b/internal/pkg/core/device_handler.go
@@ -5225,14 +5225,6 @@
 	// cleanup routines a chance to come to an end
 	time.Sleep(2 * time.Second)
 
-	if dh.pOnuOmciDevice != nil {
-		if dh.pOnuOmciDevice.PDevOmciCC != nil {
-			// Since we cannot rule out that one of the handlers had initiated any OMCI configurations during its
-			// reset handling (even in future coding), request monitoring is canceled here one last time to
-			// be sure that all corresponding go routines are terminated
-			dh.pOnuOmciDevice.PDevOmciCC.CancelRequestMonitoring(ctx)
-		}
-	}
 	time.Sleep(3 * time.Second)
 
 	if dh.pOnuTP != nil {
diff --git a/internal/pkg/core/openonu.go b/internal/pkg/core/openonu.go
index fbd7be1..fce08b4 100755
--- a/internal/pkg/core/openonu.go
+++ b/internal/pkg/core/openonu.go
@@ -366,6 +366,15 @@
 			handler.pOnuMetricsMgr.SetdeviceDeletionInProgress(true)
 		}
 
+		if handler.pOnuOmciDevice != nil {
+			if handler.pOnuOmciDevice.PDevOmciCC != nil {
+				// Since we cannot rule out that one of the handlers had initiated any OMCI configurations during its
+				// reset handling (even in future coding), request monitoring is canceled here one last time to
+				// be sure that all corresponding go routines are terminated
+				handler.pOnuOmciDevice.PDevOmciCC.CancelRequestMonitoring(ctx)
+			}
+		}
+
 		close(handler.deviceDeleteCommChan)
 		if resetErr := handler.resetFsms(ctx, true); resetErr != nil {
 			logger.Errorw(ctx, "failed to reset FSMs for the device", log.Fields{"device-id": device.Id, "err": resetErr})