| Index: source/i18n/rbt.cpp
|
| diff --git a/source/i18n/rbt.cpp b/source/i18n/rbt.cpp
|
| index 5c4d3beaee5ece34a2951ef7d06b04009da29deb..1e4b593cce469959397a2d813c67960563180592 100644
|
| --- a/source/i18n/rbt.cpp
|
| +++ b/source/i18n/rbt.cpp
|
| @@ -1,3 +1,5 @@
|
| +// Copyright (C) 2016 and later: Unicode, Inc. and others.
|
| +// License & terms of use: http://www.unicode.org/copyright.html
|
| /*
|
| **********************************************************************
|
| * Copyright (C) 1999-2015, International Business Machines
|
| @@ -240,31 +242,27 @@ RuleBasedTransliterator::handleTransliterate(Replaceable& text, UTransPosition&
|
| // Double-locking must be prevented in these cases.
|
| //
|
|
|
| - // If the transliteration data is exclusively owned by this transliterator object,
|
| - // we don't need to do any locking. No sharing between transliterators is possible,
|
| - // so no concurrent access from multiple threads is possible.
|
| UBool lockedMutexAtThisLevel = FALSE;
|
| - if (isDataOwned == FALSE) {
|
| - // Test whether this request is operating on the same text string as
|
| - // some other transliteration that is still in progress and holding the
|
| - // transliteration mutex. If so, do not lock the transliteration
|
| - // mutex again.
|
| - //
|
| - // gLockedText variable is protected by the global ICU mutex.
|
| - // Shared RBT data protected by transliteratorDataMutex.
|
| - //
|
| - // TODO(andy): Need a better scheme for handling this.
|
| - UBool needToLock;
|
| - {
|
| - Mutex m;
|
| - needToLock = (&text != gLockedText);
|
| - }
|
| - if (needToLock) {
|
| - umtx_lock(&transliteratorDataMutex); // Contention, longish waits possible here.
|
| - Mutex m;
|
| - gLockedText = &text;
|
| - lockedMutexAtThisLevel = TRUE;
|
| - }
|
| +
|
| + // Test whether this request is operating on the same text string as
|
| + // some other transliteration that is still in progress and holding the
|
| + // transliteration mutex. If so, do not lock the transliteration
|
| + // mutex again.
|
| + //
|
| + // gLockedText variable is protected by the global ICU mutex.
|
| + // Shared RBT data protected by transliteratorDataMutex.
|
| + //
|
| + // TODO(andy): Need a better scheme for handling this.
|
| + UBool needToLock;
|
| + {
|
| + Mutex m;
|
| + needToLock = (&text != gLockedText);
|
| + }
|
| + if (needToLock) {
|
| + umtx_lock(&transliteratorDataMutex); // Contention, longish waits possible here.
|
| + Mutex m;
|
| + gLockedText = &text;
|
| + lockedMutexAtThisLevel = TRUE;
|
| }
|
|
|
| // Check to make sure we don't dereference a null pointer.
|
|
|