Skip to content

Fatal error: Can't compare indices belonging to different collections #2

Description

@mikon63

I am getting a strange runtime error after changing the aisShips Dictionary to the ThreadSafeDictionary:

Can't compare indices belonging to different collections

Following function is called by timer every 120 seconds. Every 20...30 minutes the app will crash with the above error. Error is caused by for (mmsi, aisShip) in aisShips
Given the time interval between crashes I suspect that the aisShips.removeValue(...) statement causes the trouble by removing a dictionary element from the dictionary. This was not an issue with the standard Dictionary.

`@objc func onAisPrune(_ timer: Timer)
{
let currentdate = Date()

    for (mmsi, aisShip) in aisShips
    {
        if currentdate.timeIntervalSince(aisShip.aisdate) > 20 * 60
        {
            nmea.dbLock.wait()
            aisShips.removeValue(forKey: mmsi)
            aisTracks.removeValue(forKey: mmsi)
            nmea.dbLock.signal()
            
            DispatchQueue.main.async {
                MapFactory.shared.removeAisTarget(mmsi: mmsi)
            }
            
        }
    }
}`

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions