]> granicus.if.org Git - icu/commitdiff
ICU-21832 Remove unsafe double-checked lock in ICUNotifier
authorAndy Heninger <andy.heninger@gmail.com>
Wed, 9 Feb 2022 00:31:34 +0000 (16:31 -0800)
committerAndy Heninger <andy.heninger@gmail.com>
Tue, 15 Feb 2022 17:11:50 +0000 (09:11 -0800)
ICUNotifier::notifyChanged() was using the thread-unsafe double-checked lock
idiom. Replace it with use of the mutex only.

icu4c/source/common/servnotf.cpp

index 10183d3a2dc1b2c8bf382e3d07ec0b320fdeed37..d9fb38875202dfa33624000f477c3621dd1fb4f1 100644 (file)
@@ -106,13 +106,11 @@ ICUNotifier::removeListener(const EventListener *l, UErrorCode& status)
 void 
 ICUNotifier::notifyChanged(void) 
 {
+    Mutex lmx(&notifyLock);
     if (listeners != NULL) {
-        Mutex lmx(&notifyLock);
-        if (listeners != NULL) {
-            for (int i = 0, e = listeners->size(); i < e; ++i) {
-                EventListener* el = (EventListener*)listeners->elementAt(i);
-                notifyListener(*el);
-            }
+        for (int i = 0, e = listeners->size(); i < e; ++i) {
+            EventListener* el = (EventListener*)listeners->elementAt(i);
+            notifyListener(*el);
         }
     }
 }