30bd45bb64
- qtwebkit-2.3.3 - include some post 2.3.3 commits/fixes
60 lines
2.4 KiB
Diff
60 lines
2.4 KiB
Diff
From 9fe66e8b769e6fe1c66b8d00b6c8e6403d9d6303 Mon Sep 17 00:00:00 2001
|
|
From: Konstantin Tokarev <ktokarev@smartlabs.tv>
|
|
Date: Tue, 10 Sep 2013 10:57:29 +0200
|
|
Subject: [PATCH 5/9] Port of r118587 to TextBreakIteratorQt.cpp.
|
|
|
|
---
|
|
.../WebCore/platform/text/qt/TextBreakIteratorQt.cpp | 19 +++++++++++++++++--
|
|
1 file changed, 17 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/Source/WebCore/platform/text/qt/TextBreakIteratorQt.cpp b/Source/WebCore/platform/text/qt/TextBreakIteratorQt.cpp
|
|
index 0d9d48d..96436a7 100644
|
|
--- a/Source/WebCore/platform/text/qt/TextBreakIteratorQt.cpp
|
|
+++ b/Source/WebCore/platform/text/qt/TextBreakIteratorQt.cpp
|
|
@@ -25,6 +25,7 @@
|
|
#include <algorithm>
|
|
#include <qdebug.h>
|
|
#include <wtf/Atomics.h>
|
|
+#include <wtf/ThreadingPrimitives.h>
|
|
|
|
// #define DEBUG_TEXT_ITERATORS
|
|
#ifdef DEBUG_TEXT_ITERATORS
|
|
@@ -70,10 +71,24 @@ namespace WebCore {
|
|
|
|
static TextBreakIterator* nonSharedCharacterBreakIterator;
|
|
|
|
+ static inline bool compareAndSwapNonSharedCharacterBreakIterator(TextBreakIterator* expected, TextBreakIterator* newValue)
|
|
+ {
|
|
+#if ENABLE(COMPARE_AND_SWAP)
|
|
+ return weakCompareAndSwap(reinterpret_cast<void**>(&nonSharedCharacterBreakIterator), expected, newValue);
|
|
+#else
|
|
+ DEFINE_STATIC_LOCAL(Mutex, nonSharedCharacterBreakIteratorMutex, ());
|
|
+ MutexLocker locker(nonSharedCharacterBreakIteratorMutex);
|
|
+ if (nonSharedCharacterBreakIterator != expected)
|
|
+ return false;
|
|
+ nonSharedCharacterBreakIterator = newValue;
|
|
+ return true;
|
|
+#endif
|
|
+ }
|
|
+
|
|
NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator(const UChar* buffer, int length)
|
|
{
|
|
m_iterator = nonSharedCharacterBreakIterator;
|
|
- bool createdIterator = m_iterator && weakCompareAndSwap(reinterpret_cast<void**>(&nonSharedCharacterBreakIterator), m_iterator, 0);
|
|
+ bool createdIterator = m_iterator && compareAndSwapNonSharedCharacterBreakIterator(m_iterator, 0);
|
|
if (!createdIterator)
|
|
m_iterator = new TextBreakIterator();
|
|
if (!setUpIterator(*m_iterator, QTextBoundaryFinder::Grapheme, buffer, length)) {
|
|
@@ -84,7 +99,7 @@ namespace WebCore {
|
|
|
|
NonSharedCharacterBreakIterator::~NonSharedCharacterBreakIterator()
|
|
{
|
|
- if (!weakCompareAndSwap(reinterpret_cast<void**>(&nonSharedCharacterBreakIterator), 0, m_iterator))
|
|
+ if (!compareAndSwapNonSharedCharacterBreakIterator(m_iterator, 0))
|
|
delete m_iterator;
|
|
}
|
|
|
|
--
|
|
1.8.3.1
|
|
|