From fe148dc641395d93712b5694385a3166008650be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 8 Apr 2025 21:48:55 +0200 Subject: [PATCH] Use QObjCWeakPointer to track QMacKeyValueObserver observed object Otherwise we might run the risk that the observed object dies before we try to do removeObserver. Change-Id: I2b54ff32728fc40fd47be2d14070fc43640f81bf Reviewed-by: Volker Hilsheimer Reviewed-by: Thiago Macieira (cherry picked from commit b6ffbebbbe75c53f8dd9a7afd97032f7f4fd8f5c) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/kernel/qcore_mac_p.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/corelib/kernel/qcore_mac_p.h b/src/corelib/kernel/qcore_mac_p.h index 2d3d6d9c5c9..473e84a70fd 100644 --- a/src/corelib/kernel/qcore_mac_p.h +++ b/src/corelib/kernel/qcore_mac_p.h @@ -408,7 +408,6 @@ public: QMacKeyValueObserver() = default; #if defined( __OBJC__) - // Note: QMacKeyValueObserver must not outlive the object observed! QMacKeyValueObserver(NSObject *object, NSString *keyPath, Callback callback, NSKeyValueObservingOptions options = NSKeyValueObservingOptionNew) : object(object), keyPath(keyPath), callback(new Callback(callback)) @@ -436,7 +435,7 @@ public: void swap(QMacKeyValueObserver &other) noexcept { - qt_ptr_swap(object, other.object); + std::swap(object, other.object); qt_ptr_swap(keyPath, other.keyPath); callback.swap(other.callback); } @@ -446,7 +445,7 @@ private: void addObserver(NSKeyValueObservingOptions options); #endif - NSObject *object = nullptr; + QObjCWeakPointer object; NSString *keyPath = nullptr; std::unique_ptr callback;