Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-69361

Concurrent crash in ICU

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: P2: Important
    • Resolution: Done
    • Affects Version/s: 5.11.0
    • Fix Version/s: 5.11.2
    • Component/s: Core: Locales (i18n)
    • Labels:
      None
    • Platform/s:
      Linux/X11
    • Commits:
      199c49517e184db09cbb5eff60e15d73096b330b

      Description

      With these env variables:

      LANGUAGE=es:en_US
      LANG=es_ES.UTF-8
      

      I get a crash in ucol_close() (aka in ICU) when using 6 concurrent threads of QCollator to sort strings, and ICUs are supposed to be thread-safe.

      #0  0x0000000000000000 in ?? ()
      #1  0x00007fffef341b8b in QCollatorPrivate::cleanup (this=0xcf5980) at tools/qcollator_icu.cpp:102
      #2  QCollatorPrivate::init() () at tools/qcollator_icu.cpp:57
      #3  0x00007fffef341dab in QCollator::compare (this=0xcd2a30, s1=0xcc7168, len1=6, s2=0xf8d298, len2=11) at tools/qcollator_icu.cpp:109
      #4  0x00007ffff6b35c30 in KFileItemModel::sortRoleCompare (this=this@entry=0xcd2a00, a=a@entry=0x98f900, b=b@entry=0xbbd3d0, collator=...)
          at /g/5kde/kde/applications/dolphin/src/kitemviews/kfileitemmodel.cpp:1839
      #5  0x00007ffff6b362a2 in KFileItemModel::lessThan (this=this@entry=0xcd2a00, a=0x98f900, b=0xbbd3d0, collator=...)
          at /g/5kde/kde/applications/dolphin/src/kitemviews/kfileitemmodel.cpp:1710
      #6  0x00007ffff6b3c715 in KFileItemModel::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)>::operator() (__closure=0x7fffbd6b8c68,
          b=<optimized out>, a=<optimized out>) at /g/5kde/kde/applications/dolphin/src/kitemviews/kfileitemmodel.cpp:1720
      #7  merge<QList<KFileItemModel::ItemData*>::iterator, KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator) const::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> >(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator, const KFileItemModel::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> &) (begin=...,
          pivot=..., end=..., lessThan=...) at /g/5kde/kde/applications/dolphin/src/kitemviews/private/kfileitemmodelsortalgorithm.h:115
      #8  0x00007ffff6b3c7db in mergeSort<QList<KFileItemModel::ItemData*>::iterator, KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator) const::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> >(QList<KFileItemModel::ItemData*>::iterator, const KFileItemModel::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> &, QList<KFileItemModel::ItemData*>::iterator) (end=..., lessThan=...,
          begin=...) at /usr/include/qt5/QtCore/qlist.h:239
      #9  0x00007ffff6b3c7b4 in mergeSort<QList<KFileItemModel::ItemData*>::iterator, KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator) const::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> >(QList<KFileItemModel::ItemData*>::iterator, const KFileItemModel::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> &, QList<KFileItemModel::ItemData*>::iterator) (end=..., lessThan=...,
          begin=...) at /usr/include/qt5/QtCore/qlist.h:239
      #10 0x00007ffff6b3c796 in mergeSort<QList<KFileItemModel::ItemData*>::iterator, KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator) const::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> >(QList<KFileItemModel::ItemData*>::iterator, const KFileItemModel::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> &, QList<KFileItemModel::ItemData*>::iterator) (end=..., lessThan=...,
          begin=...) at /usr/include/qt5/QtCore/qlist.h:239
      #11 0x00007ffff6b3c796 in mergeSort<QList<KFileItemModel::ItemData*>::iterator, KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator) const::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> >(QList<KFileItemModel::ItemData*>::iterator, const KFileItemModel::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> &, QList<KFileItemModel::ItemData*>::iterator) (end=..., lessThan=...,
          begin=...) at /usr/include/qt5/QtCore/qlist.h:239
      #12 0x00007ffff6b3c796 in mergeSort<QList<KFileItemModel::ItemData*>::iterator, KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator) const::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> >(QList<KFileItemModel::ItemData*>::iterator, const KFileItemModel::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> &, QList<KFileItemModel::ItemData*>::iterator) (end=..., lessThan=...,
          begin=...) at /usr/include/qt5/QtCore/qlist.h:239
      #13 0x00007ffff6b3c796 in mergeSort<QList<KFileItemModel::ItemData*>::iterator, KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator) const::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> >(QList<KFileItemModel::ItemData*>::iterator, const KFileItemModel::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> &, QList<KFileItemModel::ItemData*>::iterator) (end=..., lessThan=...,
          begin=...) at /usr/include/qt5/QtCore/qlist.h:239
      #14 0x00007ffff6b3c796 in mergeSort<QList<KFileItemModel::ItemData*>::iterator, KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator) const::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> >(QList<KFileItemModel::ItemData*>::iterator, const KFileItemModel::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> &, QList<KFileItemModel::ItemData*>::iterator) (end=..., lessThan=...,
          begin=...) at /usr/include/qt5/QtCore/qlist.h:239
      #15 0x00007ffff6b3c796 in mergeSort<QList<KFileItemModel::ItemData*>::iterator, KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator) const::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> >(QList<KFileItemModel::ItemData*>::iterator, const KFileItemModel::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> &, QList<KFileItemModel::ItemData*>::iterator) (end=..., lessThan=...,
          begin=...) at /usr/include/qt5/QtCore/qlist.h:239
      #16 0x00007ffff6b3d738 in parallelMergeSort<QList<KFileItemModel::ItemData*>::iterator, KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator) const::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)> >(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator, KFileItemModel::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)>, int, int) (begin=..., end=...,
          lessThan=..., numberOfThreads=<optimized out>, parallelMergeSortingThreshold=<optimized out>) at /usr/include/qt5/QtCore/qlist.h:239
      #17 0x00007ffff6b322fb in QtConcurrent::StoredFunctorCall5<void, void (*)(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator, KFi---Type <return> leItemModel::sort(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator) const::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)>, int, int), QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator, KFileItemModel::sort(QList<KFileItemModel::ItemData*>::iterator, QList<KFileItemModel::ItemData*>::iterator) const::<lambda(const KFileItemModel::ItemData*, const KFileItemModel::ItemData*)>, int, int>::runFunctor(void) (this=<optimized out>) at /usr/include/qt5/QtCore/qlist.h:239
      #18 0x00007ffff6b40eaf in non-virtual thunk to QtConcurrent::RunFunctionTask<void>::run() () at /usr/include/qt5/QtCore/qfutureinterface.h:293
      #19 0x00007fffef2b3181 in QThreadPoolThread::run() () at thread/qthreadpool.cpp:101
      #20 0x00007fffef2ba93c in QThreadPrivate::start(void*) () at thread/qthread_unix.cpp:367
      #21 0x00007fffeb226554 in start_thread (arg=<optimized out>) at pthread_create.c:463
      #22 0x00007ffff6f00fdf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
      

      More information in https://phabricator.kde.org/D13814

        Attachments

        For Gerrit Dashboard: QTBUG-69361
        # Subject Branch Project Status CR V

          Activity

            People

            Assignee:
            Eddy Edward Welbourne
            Reporter:
            jtamate Jaime Torres
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved:

                Gerrit Reviews

                There are no open Gerrit changes