Сбой STLport (состояние гонки, только Дарвин?) - PullRequest
1 голос
/ 05 марта 2010

Когда я запускаю STLport в Дарвине, я получаю странный сбой. (Я не видел его нигде, кроме Mac, но точно так же происходит сбой на i686 и PowerPC.) Вот как это выглядит в gdb:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: 13 at address: 0x0000000000000000
[Switching to process 21097]
0x000000010120f47c in stlp_std::__node_alloc_impl::_M_allocate ()

Это может быть какая-то настройка в STLport, я заметил, что Mac.h и MacOSX.h, похоже, сильно отстали по функциям. Я также знаю, что это должно быть какое-то состояние гонки, поскольку это происходит не просто при вызове этого метода (вызывается простота). Сбой происходит в основном, когда я нажимаю на систему, запуская 10 одновременных потоков, которые выполняют много операций со строками.

Другие теории, с которыми я столкнулся, касаются флагов компилятора (скрипт configure) и ошибок g ++ 4.2 (похоже, 4.4.3 еще не на Mac с поддержкой Objective-C, с которой мне нужно связать).

HELP !!! :)

Редактировать : Я запускаю модульные тесты, которые делают все что угодно. Эта проблема возникает, когда я запускаю 10 потоков, которые выдвигают систему; и это всегда сводится к std :: string :: append, который в конечном итоге сводится к _M_allocate. Поскольку я даже не могу получить дамп спуска кода, который вызывает проблему, я полагаю, что делаю что-то плохое. Может ли быть так, потому что он пытается выполнить по указателю инструкции 0x000 ... 000? Dynlibs создаются как библиотеки DLL в Windows с таблицей переходов? Возможно ли, что такая таблица переходов по какой-то причине была перезаписана? Это, вероятно, объясняет это поведение. (Код огромен, если у меня закончатся другие идеи, я опубликую здесь пример минимального сбоя.)

Ответы [ 2 ]

1 голос
/ 09 марта 2010

хмм .. STLPort использует распределители, которые занимают память платформы и объединяют ее внутри структуры данных, когда это необходимо.

Просто проверьте, когда происходит сбой, кучи, выделенной исполняющему потоку, достаточно для выполнения alloc.Даже в случае сбоя alloc может произойти сбой.

Я не уверен в степени детализации распределителя STL в текущей конфигурации, над которой вы работаете.Проверьте stl_config.h для этого.

0 голосов
/ 29 марта 2010

Эта проблема была вызвана несвязанной ошибкой сбоя , вызывающей перезаписи памяти, приводящей к сбою STLport в моем случае.

...