Skip to content

Commit 577d10f

Browse files
fix: ios view registration race condition (#555)
Co-authored-by: Joonas Kerttula <[email protected]>
1 parent db19ffc commit 577d10f

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

ios/google_navigation_flutter/Sources/google_navigation_flutter/GoogleMapsNavigationView.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ public class GoogleMapsNavigationView: NSObject, FlutterPlatformView, ViewSettle
133133
_viewRegistry.unregisterCarPlayView()
134134
} else {
135135
if let _viewId {
136-
_viewRegistry.unregisterView(viewId: _viewId)
136+
let viewInstanceId = ObjectIdentifier(self)
137+
_viewRegistry.unregisterView(viewId: _viewId, viewInstanceIdToUnregister: viewInstanceId)
137138
}
138139
}
139140
}

ios/google_navigation_flutter/Sources/google_navigation_flutter/GoogleMapsNavigationViewRegistry.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,16 @@ class GoogleMapsNavigationViewRegistry {
3333
)
3434

3535
func registerView(viewId: Int64, view: GoogleMapsNavigationView) {
36-
queue.async(flags: .barrier) { [weak self] in
37-
DispatchQueue.main.async {
38-
self?.views[viewId] = view
39-
}
36+
queue.sync(flags: .barrier) { [weak self] in
37+
self?.views[viewId] = view
4038
}
4139
}
4240

43-
func unregisterView(viewId: Int64) {
41+
func unregisterView(viewId: Int64, viewInstanceIdToUnregister: ObjectIdentifier) {
4442
queue.async(flags: .barrier) { [weak self] in
45-
DispatchQueue.main.async {
43+
if let registeredView = self?.views[viewId],
44+
ObjectIdentifier(registeredView) == viewInstanceIdToUnregister
45+
{
4646
self?.views.removeValue(forKey: viewId)
4747
}
4848
}

0 commit comments

Comments
 (0)