[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})