LINUX.ORG.RU

Рассинхронизация тредов

 , ,


0

1

Наткнулся на падение при загрузке десктопа при использование TDE R14.0.4 в Slackware 14.2/current x86. Проблема с пакетом tqt, встроенный анализатор выдаёт вот такой лог:

No symbol table info available.
#5 TQChar::unicode (this=0x8973000) at /tmp/build/tmp-tqt3/dependencies/tqt3/src/tools/ntqstring.h:199
No locals.
#6 TQString::utf8 (this=this@entry=0xbfa7a66c) at /tmp/build/tmp-tqt3/dependencies/tqt3/src/tools/qstring.cpp:5991
u = <optimized out>
i = <optimized out>
l = 569873234
rlen = 1709619703
rstr = {<TQMemArray<char>> = {<TQGArray> = {_vptr.TQGArray = 0xb678b898 <vtable for TQCString+8>, shd = 0x8943418}, <No data fields>}, <No data fields>}
cursor = 0x4ecb7057 ""
ch = 0x8973000
#7 0xb6912096 in TDEConfigBase::setGroup (this=0x891c650, group=...) at /tmp/build/tmp-tdelibs/tdelibs/tdecore/tdeconfigbase.cpp:84
No locals.

после ковыряние отладчиком место падения установлено как tdeconfigskeleton.cpp:953, причём всегда когда используется русская локаль в Тринити и smp-версия ядра. Знающие люди подсказали, что большое значение l = 569873234 мусорные данные и указывает на рассинхронизацию потоков. Значение u-i не видны из-за оптимизации, когда собираешь с опцией -O0 ошибка никак себя не проявляет. Подозреваю, что такой фокус происходит только на моём процессоре core2duo и на Slackware-системе потому, что другие ОС которые я у себя тестировал чтобы вызвать ошибку работают стабильно как часы.

Вопрос к специалистам: в чём тут может быть дело? Какие-то проблемы с библиотеками/настройкой ядра, кривой код, проц или что-то ещё? В какую примерно сторону копать чтобы выяснить причину? Вообще из-за чего такое может произойти? Может у кого есть аналогичное железо на подобном камне чтобы проверить работу?



Последнее исправление: Algierd (всего исправлений: 4)

кривой код

Голосую за этот вариант. Может в более новой версии исправили/исправят (может им стоит багрепорт отправить).

xaizek ★★★★★
()

tdeconfigskeleton.cpp:953

Номер строки — не очень надежная ссылка, сейчас там:

http://mirror.git.trinitydesktop.org/cgit/tdelibs/tree/tdecore/tdeconfigskele...
TQString origGroup = mConfig->group();

void TDEConfigSkeleton::readConfig()
{
  kdDebug(177) << "TDEConfigSkeleton::readConfig()" << endl;
  
  TQString origGroup = mConfig->group();

  mConfig->reparseConfiguration();
  TDEConfigSkeletonItem::List::ConstIterator it;
  for( it = mItems.begin(); it != mItems.end(); ++it )
  {
    (*it)->readConfig( mConfig );
  }

  usrReadConfig();
  
  mConfig->setGroup(origGroup);
}

http://mirror.git.trinitydesktop.org/cgit/tdelibs/tree/tdecore/tdeconfigbase....
mGroup = group.utf8();

void TDEConfigBase::setGroup( const TQString& group )
{
  if ( group.isEmpty() )
    mGroup = "<default>";
  else
    mGroup = group.utf8();
}

У вас (в исходниках, из которых собрано) также?

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 3)
Ответ на: комментарий от bormant

Падает рандомно т.е можно 5 раз зайти в сессию будет нормально, потом упадёт, после чего опять всё нормально. То что удалось выудить из gdb показывал людям на irc-канале, много мусорных данных и рассинхронизация тредов. Почему хз, никто ничем не помог, подозреваю это только так на Слаке оно себя ведёт, Debian/Ubuntu с Trinity подобной бедой не страдают...

Algierd
() автор топика
Ответ на: комментарий от Algierd

Debian/Ubuntu с Trinity подобной бедой не страдают...

Не пробовали самый простой эксперимент — перепаковать эти самые бинарники в пакеты Slackware и поставить именно их?
Либо точно установить версии используемого софта и наборы патчей и воспроизвести сборку, что будет посложнее?

bormant ★★★★★
()
Ответ на: комментарий от bormant

Надо бы покумекать, там по-идее всего пару пакетов нужно: tqt3+tdelibs и возможно ещё tdebase до кучи.

Algierd
() автор топика
Ответ на: комментарий от bormant

Сегодня попробовал TDE собранный sunjob, такая же беда с падениями. Судя по-логам отладчика падает оно где в glibc, при использовании smp-ядра, а вот что именно и с чем там конфликтует пока не очень понятно...

Algierd
() автор топика
Ответ на: комментарий от Algierd

Если удастся чужое бинарное стабильное tde перепаковать и поставить, и оно тоже падать начнет — это будет хорошим поводом искать ошибки вне tde. А если не начнет — хороший повод изучить сборку и патчи там, откуда позаимствовали бинарники.
При наличии «стабильного» бинарного tde, на мой взгляд, была бы самая простая проверка для направления, куда рыть.

bormant ★★★★★
()
Ответ на: комментарий от bormant

Бегло посмотрел на состав пакетов в ppa: от Убунты вряд ли получится подсунить. Opensuse может?

Algierd
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.