While trying to bring-up the QtWebkit-2.3 on an embedded system running an ARM 11MPCore, found ~NonSharedCharacterBreakIterator() to lead to a CRASH() (gdb) bt #0 0x2cda3318 in weakCompareAndSwap (this=0x7ebd8c3c, __in_chrg=<value optimized out>) at /home/chombourger/bp-mvl-project/tmp/work/armv6-mv-linux/qtwebkit-2.3.0-r4/chombourger-qtwebkit-23/Source/WTF/wtf/Atomics.h:200 #1 WebCore::NonSharedCharacterBreakIterator::~NonSharedCharacterBreakIterator (this=0x7ebd8c3c, __in_chrg=<value optimized out>) at /home/chombourger/bp-mvl-project/tmp/work/armv6-mv-linux/qtwebkit-2.3.0-r4/chombourger-qtwebkit-23/Source/WebCore/platform/text/qt/TextBreakIteratorQt.cpp:87 Found this to be caused by TextBreakIteratorQt.cpp making use of weakCompareAndSwap even though COMPARE_AND_SWAP is not enabled in my configuration. Looks like the same issue existed in the ICU implementation and was worked-around by adding a static mutex to protect the single entry NonSharedCharacterBreakIterator cache Configuration details: git: git://gitorious.org/+qtwebkit-developers/webkit/qtwebkit-23.git rev: abd77b3f85375632aa313934e8eb9ae89f2bbf2e cat /proc/cpuinfo Processor : ARMv6-compatible processor rev 4 (v6l) processor : 0 BogoMIPS : 398.95 processor : 1 BogoMIPS : 398.95 Features : swp half thumb fastmult vfp edsp java CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xb02 CPU revision : 4
Adding compareAndSwapNonSharedCharacterBreakIterator() to Source/WebCore/platform/text/qt/TextBreakIteratorQt.cpp + static inline bool compareAndSwapNonSharedCharacterBreakIterator(TextBreakIterator* expected, TextBreakIterator* newV + { +#if ENABLE(COMPARE_AND_SWAP) + return weakCompareAndSwap(reinterpret_cast<void**>(&nonSharedCharacterBreakIterator), expected, newValue); +#else + DEFINE_STATIC_LOCAL(QMutex, nonSharedCharacterBreakIteratorMutex, ()); + QMutexLocker locker(&nonSharedCharacterBreakIteratorMutex); + if (nonSharedCharacterBreakIterator != expected) + return false; + nonSharedCharacterBreakIterator = newValue; + return true; +#endif + } and use from: NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator(const UChar* buffer, int length) NonSharedCharacterBreakIterator::~NonSharedCharacterBreakIterator()
Created attachment 205080 [details] Patch to fix TextBreakIteratorQt.cpp I've also encountered this problem when building and running QtWebkit 2.3 on MiPS. Since the TextBreakIteratorICU.cpp already has a similar patch, I think this should also be patched. I've attached the proposed patch based on Cedric's comment.
I think we're seeing this too downstream on fedora20/arm : https://bugzilla.redhat.com/show_bug.cgi?id=1006539 Will test out the proposed patch here, and give feedback.
The patch has been applied to qtwebkit-2.3-staging and will be part of 2.3.4 when released.
Comment on attachment 205080 [details] Patch to fix TextBreakIteratorQt.cpp Qt has been removed, clearing review flags.