fixing issues with restarting alarm manager during onu reboot or delete device

Change-Id: I68bdf8318b4502e1fe324acf686c98f3eb356f91
diff --git a/internal/pkg/onuadaptercore/alarm_manager.go b/internal/pkg/onuadaptercore/alarm_manager.go
index cb0c223..5b070ab 100644
--- a/internal/pkg/onuadaptercore/alarm_manager.go
+++ b/internal/pkg/onuadaptercore/alarm_manager.go
@@ -334,26 +334,35 @@
 
 func (am *onuAlarmManager) processAlarmSyncMessages(ctx context.Context) {
 	logger.Debugw(ctx, "start-routine-to-process-omci-messages-for-alarm-sync", log.Fields{"device-id": am.pDeviceHandler.deviceID})
-	am.flushAlarmSyncChannels(ctx)
-loop:
 	for {
-		message, ok := <-am.eventChannel
-		if !ok {
-			logger.Info(ctx, "alarm-sync-omci-message-could-not-be-read-from-channel", log.Fields{"device-id": am.pDeviceHandler.deviceID})
-			break loop
-		}
-		logger.Debugw(ctx, "alarm-sync-omci-message-received", log.Fields{"device-id": am.pDeviceHandler.deviceID})
+		select {
+		case message, ok := <-am.eventChannel:
+			if !ok {
+				logger.Info(ctx, "alarm-sync-omci-message-could-not-be-read-from-channel", log.Fields{"device-id": am.pDeviceHandler.deviceID})
+				continue
+			}
+			logger.Debugw(ctx, "alarm-sync-omci-message-received", log.Fields{"device-id": am.pDeviceHandler.deviceID})
 
-		switch message.Type {
-		case OMCI:
-			msg, _ := message.Data.(OmciMessage)
-			am.handleOmciMessage(ctx, msg)
-		default:
-			logger.Warn(ctx, "alarm-sync-unknown-message-type-received", log.Fields{"device-id": am.pDeviceHandler.deviceID, "message.Type": message.Type})
+			switch message.Type {
+			case OMCI:
+				msg, _ := message.Data.(OmciMessage)
+				am.handleOmciMessage(ctx, msg)
+			default:
+				logger.Warn(ctx, "alarm-sync-unknown-message-type-received", log.Fields{"device-id": am.pDeviceHandler.deviceID, "message.Type": message.Type})
+			}
+		case <-am.stopProcessingOmciMessages:
+			logger.Infow(ctx, "alarm-manager-stop-omci-alarm-message-processing-routines", log.Fields{"device-id": am.pDeviceHandler.deviceID})
+			am.onuAlarmManagerLock.Lock()
+			am.processMessage = false
+			am.activeAlarms = nil
+			am.alarmBitMapDB = nil
+			am.alarmUploadNoOfCmds = 0
+			am.alarmUploadSeqNo = 0
+			am.onuAlarmManagerLock.Unlock()
+			return
+
 		}
 	}
-	logger.Info(ctx, "alarm-sync-stopped-handling-of-alarm-sync-omci-message", log.Fields{"device-id": am.pDeviceHandler.deviceID})
-	_ = am.alarmSyncFsm.pFsm.Event(asEvStop)
 }
 
 func (am *onuAlarmManager) handleOmciMessage(ctx context.Context, msg OmciMessage) {
@@ -492,6 +501,7 @@
 }
 
 func (am *onuAlarmManager) startOMCIAlarmMessageProcessing(ctx context.Context) {
+	logger.Infow(ctx, "alarm-manager-start-omci-alarm-message-processing-routines", log.Fields{"device-id": am.pDeviceHandler.deviceID})
 	am.onuAlarmManagerLock.Lock()
 	am.processMessage = true
 	if am.activeAlarms == nil {
@@ -499,6 +509,8 @@
 	}
 	am.alarmBitMapDB = make(map[meAlarmKey][alarmBitMapSizeBytes]byte)
 	am.onuAlarmManagerLock.Unlock()
+	am.flushAlarmSyncChannels(ctx) // Need to do this first as there might be stale data on the channels and the start state waits on same channels
+
 	if am.alarmSyncFsm.pFsm.Is(asStDisabled) {
 		if err := am.alarmSyncFsm.pFsm.Event(asEvStart); err != nil {
 			logger.Errorw(ctx, "alarm-sync-fsm-can-not-go-to-state-starting", log.Fields{"device-id": am.pDeviceHandler.deviceID, "err": err})
@@ -510,17 +522,6 @@
 		return
 	}
 	logger.Debugw(ctx, "alarm-sync-fsm-started", log.Fields{"state": string(am.alarmSyncFsm.pFsm.Current())})
-
-	if stop := <-am.stopProcessingOmciMessages; stop {
-		am.onuAlarmManagerLock.Lock()
-		am.processMessage = false
-		am.activeAlarms = nil
-		am.alarmBitMapDB = nil
-		am.alarmUploadNoOfCmds = 0
-		am.alarmUploadSeqNo = 0
-		am.onuAlarmManagerLock.Unlock()
-
-	}
 }
 
 func (am *onuAlarmManager) handleOmciAlarmNotificationMessage(ctx context.Context, msg OmciMessage) {