From 5b24f43e793d77aa8322527d659977f3d0d7e709 Mon Sep 17 00:00:00 2001 From: Joe George Date: Wed, 17 Jan 2024 13:18:15 -0500 Subject: [PATCH] Remove IceUtil::Mutex from objc --- objective-c/src/Ice/Initialize.mm | 29 ++++++++++------------------- objective-c/src/Ice/PropertiesI.h | 2 +- objective-c/src/Ice/PropertiesI.mm | 4 ++-- 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/objective-c/src/Ice/Initialize.mm b/objective-c/src/Ice/Initialize.mm index 4a753fc43f8..9e6735ab557 100644 --- a/objective-c/src/Ice/Initialize.mm +++ b/objective-c/src/Ice/Initialize.mm @@ -47,9 +47,10 @@ namespace { -typedef std::map CompactIdMap; +using CompactIdMap = std::map; -IceUtil::Mutex* _compactIdMapMutex = 0; +// The std::mutex consturctor is constexpr so this mutex is statically initialized +std::mutex _compactIdMapMutex; CompactIdMap* _compactIdMap = 0; class CompactIdResolverI : public Ice::CompactIdResolver @@ -59,10 +60,9 @@ virtual ::std::string resolve(::Ice::Int value) const { - assert(_compactIdMapMutex); assert(_compactIdMap); - IceUtilInternal::MutexPtrLock lock(_compactIdMapMutex); + std::lock_guard lock(_compactIdMapMutex); CompactIdMap::iterator p = _compactIdMap->find(value); if(p != _compactIdMap->end()) { @@ -73,8 +73,7 @@ }; // -// We don't use the constructor to initialize the compactIdMap as -// static initializtion takes place after +load is called. +// We don't use the constructor to initialize the compactIdMap as the initializtion takes place after +load is called. // class Init { @@ -87,12 +86,6 @@ delete _compactIdMap; _compactIdMap = 0; } - - if(_compactIdMapMutex) - { - delete _compactIdMapMutex; - _compactIdMapMutex = 0; - } } }; Init init; @@ -102,18 +95,15 @@ @implementation CompactIdMapHelper +(void) initialize { - assert(!_compactIdMapMutex); assert(!_compactIdMap); - _compactIdMapMutex = new ::IceUtil::Mutex; _compactIdMap = new CompactIdMap; } +(void) registerClass:(NSString*)type value:(ICEInt)value { - assert(_compactIdMapMutex); assert(_compactIdMap); - IceUtilInternal::MutexPtrLock lock(_compactIdMapMutex); + std::lock_guard lock(_compactIdMapMutex); CompactIdMap::iterator p = _compactIdMap->find(value); if(p != _compactIdMap->end()) { @@ -126,7 +116,7 @@ +(void) registerClass:(NSString*)type value:(ICEInt)value namespace IceObjC { -class ThreadNotification : public Ice::ThreadNotification, public IceUtil::Mutex +class ThreadNotification : public Ice::ThreadNotification { public: @@ -136,13 +126,13 @@ +(void) registerClass:(NSString*)type value:(ICEInt)value virtual void start() { - Lock sync(*this); + std::lock_guard lock(_mutex); _pools.insert(std::make_pair(IceUtil::ThreadControl().id(), [[NSAutoreleasePool alloc] init])); } virtual void stop() { - Lock sync(*this); + std::lock_guard lock(_mutex); std::map::iterator p = _pools.find(IceUtil::ThreadControl().id()); [p->second drain]; @@ -152,6 +142,7 @@ virtual void stop() private: std::map _pools; + std::mutex _mutex; }; }; diff --git a/objective-c/src/Ice/PropertiesI.h b/objective-c/src/Ice/PropertiesI.h index 0a5659ed20d..625b467e6c7 100644 --- a/objective-c/src/Ice/PropertiesI.h +++ b/objective-c/src/Ice/PropertiesI.h @@ -21,7 +21,7 @@ @interface ICENativePropertiesAdmin : ICEServantWrapper { - IceUtil::Mutex mutex_; + std::mutex mutex_; std::vector>> callbacks_; } @end diff --git a/objective-c/src/Ice/PropertiesI.mm b/objective-c/src/Ice/PropertiesI.mm index bb73c844c88..1a947ede858 100644 --- a/objective-c/src/Ice/PropertiesI.mm +++ b/objective-c/src/Ice/PropertiesI.mm @@ -225,7 +225,7 @@ -(void) load:(NSString*)file @implementation ICENativePropertiesAdmin -(void) addUpdateCallback:(id)cb { - IceUtil::Mutex::Lock sync(mutex_); + std::lock_guard lock(mutex_); std::function remover = std::dynamic_pointer_cast(object_)->addUpdateCallback( [cb](const Ice::PropertyDict& properties) @@ -254,7 +254,7 @@ -(void) addUpdateCallback:(id)cb -(void) removeUpdateCallback:(id)cb { - IceUtil::Mutex::Lock sync(mutex_); + std::lock_guard lock(mutex_); // Each removeUpdateCallback only removes the first occurrence auto p = std::find_if(callbacks_.begin(), callbacks_.end(), [cb](const auto& q) { return q.first == cb; });