Или это уже у меня заскоки, хз. В общем вот main.cpp:
#include <QCoreApplication>
#include <QUuid>
#include <QThreadStorage>
class Foo
{
public:
void bar()
{
QUuid::createUuid();
}
};
Foo* test()
{
QThreadStorage<Foo*> data;
if (!data.hasLocalData())
{
data.setLocalData(new Foo());
}
return data.localData();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
for (int i = 0; i < 100; i++)
{
test()->bar();
}
return a.exec();
}
Падает с SIGSEGV на Quuid::createUuid():
0 __memcpy_sse2_unaligned /usr/lib/libc.so.6 0x7f89dc26bbe0
1 QIODevice::read(char*, long long) /usr/lib/libQt5Core.so.5 0x7f89dcbf9570
2 QUuid::createUuid() /usr/lib/libQt5Core.so.5 0x7f89dcc9b602
3 Foo::bar main.cpp 10 0x40117b
4 main main.cpp 30 0x401126
Ловит SIGSEGV на g++ 4.8.2/Qt 5.1.1 @ x86_64 (Archlinux current). С Qt 4.8.5 - SIGSEGV на a.exec() (где-то в malloc'е) Припоминаю похожие приколы на Qt 4.6.x, тогда решил забить на QThreadStorage (да судя по всему, на него вообще навсегда надо забить, кривулина).
Собственно просьба к уважаемым аналитикам подтвердить/опровергнуть баг перед постом в багзиллу.
Перемещено mono из talks