Bug 25857 - Падение плагина диалога выбора файла для сохранения
Summary: Падение плагина диалога выбора файла для сохранения
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: kde4base (show other bugs)
Version: unstable
Hardware: all Linux
: P3 major
Assignee: Sergey V Turchin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-07-05 11:11 MSK by Roman Savochenko
Modified: 2011-07-11 09:36 MSK (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Roman Savochenko 2011-07-05 11:11:21 MSK
Имеется QT4 программа, использующая функцию QFileDialog::getSaveFileName() для вызова диалога выбора файла для сохранения.
В окружении KDE4 эта функция вызывает плагин KDE4, для выполнения интегрированной в KDE4 операции выбора файла для сохранения.
Так вот, этот плагин иногда, но довольно часто, падает в корку, целиком с программой.
В консоли имеется:
openscada(13171)/kdecore (KSycoca) KSycocaPrivate::openDatabase: Trying to open ksycoca from "/var/tmp/kdecache-roman/ksycoca4"
KGlobal::locale::Warning your global KLocale is being recreated with a valid main component instead of a fake component, this usually means you tried to call i18n related functions before your main component was created. You should not do that since it most likely will not work 
kfilemodule(13171)/kfile (kdelibs) KFileWidget::KFileWidget: startDir KUrl("Тренд1.png")
kfilemodule(13171)/kio (KDirWatch) KDirWatchPrivate::addEntry: Added File "/home/roman/.local/share//user-places.xbel" NotExisting for "" ["KDirWatch-1"]
kfilemodule(13171)/kio (KDirWatch) KDirWatchPrivate::addEntry: Added Dir "/home/roman/.local/share" for "/home/roman/.local/share//user-places.xbel" [""]
kfilemodule(13171)/kio (bookmarks) KBookmarkManager::KBookmarkManager: starting KDirWatch for  "/home/roman/.local/share//user-places.xbel"
kfilemodule(13171)/kio (KDirListerCache) KDirListerCache::listDir: Listing directory: KUrl("trash:/")
kfilemodule(13171)/kio (Scheduler) KIO::SchedulerPrivate::doJob: KIO::SimpleJob(0x95dd7c0)
kfilemodule(13171)/kio (Scheduler) KIO::SchedulerPrivate::protoQ: creating ProtoQueue instance for "trash"
kfilemodule(13171)/kio (Scheduler) KIO::ProtoQueue::ProtoQueue: m_maxConnectionsTotal: 2 m_maxConnectionsPerHost: 2
kfilemodule(13171)/kfile (kdelibs) KFileWidget::getStartUrl: for KUrl("Тренд1.png") -> KUrl("file:///mnt/home/roman/work/OScadaD/share/openscada") recentDirClass "" fileName "Тренд1.png"
kfilemodule(13171)/kfile (kdelibs) KDirOperator::setDirLister: mainWidget= KFileDialog(0xb5b42b54)
kfilemodule(13171)/kfile (kdelibs) KDirOperator::Private::updateSorting: changing sort flags from QFlags(0x1|0x2|0x4|0x8|0x10|0x20|0x40|0x80|0x100|0x200|0x400|0x800|0x1000|0x2000|0x4000|0x8000|0x10000|0x20000|0x40000|0x80000|0x100000|0x200000|0x400000|0x800000|0x1000000|0x2000000|0x4000000|0x8000000|0x10000000|0x20000000|0x40000000|0xffffffff80000000) to QFlags(0x4)
kfilemodule(13171)/kfile (kdelibs) KDirOperator::Private::updateSorting: changing sort flags from QFlags(0x4) to QFlags(0x4)
kfilemodule(13171)/kfile (kdelibs) KFileWidget::KFileWidget: selecting filename "Тренд1.png"
kfilemodule(13171)/kfile (kdelibs) KDirOperator::setCurrentItems:
./openscada_demo: line 24: 13171 Segmentation fault      (core dumped) $pCmd $@

Трассировка вызовов предсмертного дампа показывает:
#0  0xb62c2d8f in QWidget::testAttribute_helper(Qt::WidgetAttribute) const () from /usr/lib/libQtGui.so.4
#1  0xa11a668a in KDirOperator::updateDir() () from /usr/lib/libkfile.so.4
#2  0xa11bbfc5 in KFileWidget::setFilter(QString const&) () from /usr/lib/libkfile.so.4
#3  0xb5064e7e in KFileDialog::KFileDialog(KUrl const&, QString const&, QWidget*, QWidget*) () from /usr/lib/libkio.so.5
#4  0xb5067024 in ?? () from /usr/lib/libkio.so.5
#5  0xb675feea in QFileDialog::getSaveFileName(QWidget*, QString const&, QString const&, QString const&, QString*, QFlags<QFileDialog::Option>) ()
   from /usr/lib/libQtGui.so.4
#6  0xb3991433 in VISION::VisRun::exportDiag (this=0x8602978, idg="") at vis_run.cpp:684

P.S. С этой самой навязчивой и часто глючной интеграцией QT4 в окружение KDE4 я уже запарился. Подскажите как её отключить, при вызове программ QT4 в KDE4. Например, ошибке интеграции KDE4 с DBus уже очень большая борода. А именно, при подобном вызове плагина KDE4 происходит создание объектов DBus, которые никогда не освобождаются, что приводит к однозначному падению приложения при его завершении, в ввиду предварительной отлинковки плагина программы.

P.P.S. Кроме того эта самая интеграция имеет явную ошибку с локализацией, которой нет в диалогах KDE4, а при каждом вызове плагина KDE4 получаем сообщение:
Global::locale::Warning your global KLocale is being recreated with a valid main component instead of a fake component, this usually means you tried to call i18n related functions before your main component was created. You should not do that since it most likely will not work
Comment 1 Repository Robot 2011-07-05 19:56:43 MSK
qt4-4.7.3-alt3 -> sisyphus:

* Tue Jul 05 2011 Sergey V Turchin <zerg@altlinux> 4.7.3-alt3
- don't force search for KDE4 plugins (ALT#25857)
Comment 2 Roman Savochenko 2011-07-06 18:19:20 MSK
(В ответ на комментарий №1)
> * Tue Jul 05 2011 Sergey V Turchin <zerg@altlinux> 4.7.3-alt3
> - don't force search for KDE4 plugins (ALT#25857)
Обновился сегодня. Плагины kde4 по прежнему линкуются в qt4. Это видно по диалогу выбора файла и по диалогу выбора цвета.
К слову. Диалог выбора цвета работает нормально и он локализован, в отличии о диалога выбора файлов.

Подскажите пожалуйста где эти плагины вообще искать, да я сам их отключу и по возможности поправлю диалог выбора файлов.
Comment 3 Sergey V Turchin 2011-07-06 18:31:59 MSK
(В ответ на комментарий №2)
> Обновился сегодня. Плагины kde4 по прежнему линкуются в qt4.
Ну и что? Чините программу, которая падает. Transmission-qt, например, тоже раньше падал.
Comment 4 Roman Savochenko 2011-07-06 18:38:03 MSK
(В ответ на комментарий №3)
> (В ответ на комментарий №2)
> > Обновился сегодня. Плагины kde4 по прежнему линкуются в qt4.
> Ну и что? Чините программу, которая падает. Transmission-qt, например, тоже
> раньше падал.
А программа тут причём? Если она просто вызывает функцию QT4, за которой цепляется целый паровоз с оверайдингом этой функции в библиотеке KDE4, где оно благополучно и падает!

Я могу абстрагироваться и вытащить официальный пример QT4, использующий вызов QFileDialog::getSaveFileName(), и который будет с таким-же успехом валиться.
Comment 5 Sergey V Turchin 2011-07-06 18:39:54 MSK
(В ответ на комментарий №4)
> Я могу абстрагироваться и вытащить официальный пример QT4, использующий вызов
> QFileDialog::getSaveFileName(), и который будет с таким-же успехом валиться.
Давайте попробуем.
Comment 6 Roman Savochenko 2011-07-06 18:56:29 MSK
(В ответ на комментарий №5)
> (В ответ на комментарий №4)
> > Я могу абстрагироваться и вытащить официальный пример QT4, использующий вызов
> > QFileDialog::getSaveFileName(), и который будет с таким-же успехом валиться.
> Давайте попробуем.
Подёргаю. Хотя сразу оно и в исходном виде не падало.
А как насчёт проблемы отсутствия локализации в диалоге выбора файла?

KGlobal::locale::Warning your global KLocale is being recreated with a valid
main component instead of a fake component, this usually means you tried to
call i18n related functions before your main component was created. You should
not do that since it most likely will not work
Comment 7 Repository Robot 2011-07-11 09:36:43 MSK
qt4-4.7.3-alt2.M60P.1 -> t6:

* Tue Jul 05 2011 Sergey V Turchin <zerg@altlinux> 4.7.3-alt2.M60P.1
- built for M60P

* Tue Jul 05 2011 Sergey V Turchin <zerg@altlinux> 4.7.3-alt3
- don't force search for KDE4 plugins (ALT#25857)