From ef89a2015126c8c1f117a14a6493bf2fded82361 Mon Sep 17 00:00:00 2001
From: Luca Moser <moser.luca@gmail.com>
Date: Tue, 9 Jun 2020 17:50:01 +0200
Subject: [PATCH] fixes comm-layer msg loss (#459)

---
 packages/binary/messagelayer/tangle/tangle.go | 9 +++++++++
 plugins/messagelayer/plugin.go                | 1 +
 2 files changed, 10 insertions(+)

diff --git a/packages/binary/messagelayer/tangle/tangle.go b/packages/binary/messagelayer/tangle/tangle.go
index 9a5f0215..26158982 100644
--- a/packages/binary/messagelayer/tangle/tangle.go
+++ b/packages/binary/messagelayer/tangle/tangle.go
@@ -274,16 +274,25 @@ func (tangle *Tangle) MonitorMissingMessages(shutdownSignal <-chan struct{}) {
 		select {
 		case <-reCheckInterval.C:
 			var toDelete []message.Id
+			var toUnmark []message.Id
 			tangle.missingMessageStorage.ForEach(func(key []byte, cachedObject objectstorage.CachedObject) bool {
 				defer cachedObject.Release()
 				missingMessage := cachedObject.Get().(*MissingMessage)
 
+				if tangle.messageStorage.Contains(missingMessage.messageId.Bytes()) {
+					toUnmark = append(toUnmark, missingMessage.MessageId())
+					return true
+				}
+
 				// check whether message is missing since over our max time delta
 				if time.Since(missingMessage.MissingSince()) >= MaxMissingTimeBeforeCleanup {
 					toDelete = append(toDelete, missingMessage.MessageId())
 				}
 				return true
 			})
+			for _, msgID := range toUnmark {
+				tangle.missingMessageStorage.DeleteIfPresent(msgID.Bytes())
+			}
 			for _, msgID := range toDelete {
 				// delete the future cone of the missing message
 				tangle.Events.MessageUnsolidifiable.Trigger(msgID)
diff --git a/plugins/messagelayer/plugin.go b/plugins/messagelayer/plugin.go
index 5e7cd7d8..8fa819b1 100644
--- a/plugins/messagelayer/plugin.go
+++ b/plugins/messagelayer/plugin.go
@@ -73,6 +73,7 @@ func configure(*node.Plugin) {
 }
 
 func run(*node.Plugin) {
+
 	if err := daemon.BackgroundWorker("Tangle[MissingMessagesMonitor]", func(shutdownSignal <-chan struct{}) {
 		Tangle.MonitorMissingMessages(shutdownSignal)
 	}, shutdown.PriorityMissingMessagesMonitoring); err != nil {
-- 
GitLab