Падает апач в libstdc++
От: Vadya  
Дата: 12.02.08 09:54
Оценка:
Собственно сабж.
Апач вот такой Apache/1.3.34
компилятор апачевского модуля gcc42

Модулл для апача падает всё время в разных местах libstdc++,
в основном во всяких стд-шных конструкциях, примеры ниже.
в коде никакого динамического выделения памяти не происходит
сплошные std контейнеры.
Никакой замены стандартных sdt алокаторов тоже не делал.

Были подозрения на то, что использовали разные версии либок libstdc++ и libc
в этом апачевском модуле используються вот такие либы
libexpat.so.6 => /usr/local/lib/libexpat.so.6 (0x282ac000)
libgd.so.4 => /usr/local/lib/libgd.so.4 (0x282cd000)
libctpp.so.1 => /usr/local/lib/libctpp.so.1 (0x2831f000)
libstdc++.so.6 => /usr/local/lib/gcc-4.2.3/libstdc++.so.6 (0x28363000)
libm.so.3 => /lib/libm.so.3 (0x2843c000)
libgcc_s.so.1 => /usr/local/lib/gcc-4.2.3/libgcc_s.so.1 (0x28457000)
libpng.so.5 => /usr/local/lib/libpng.so.5 (0x28461000)
libz.so.2 => /lib/libz.so.2 (0x28484000)
libjpeg.so.9 => /usr/local/lib/libjpeg.so.9 (0x28494000)
libfreetype.so.9 => /usr/local/lib/libfreetype.so.9 (0x284b1000)
libc.so.5 => /lib/libc.so.5 (0x28079000)

Уже весь мозг сломал не пойму в чем дело.

Пример 1.(стек из гдб)
#0 0x2813c2f2 in ldexp () from /lib/libc.so.5
#1 0x2813c743 in ldexp () from /lib/libc.so.5
#2 0x2813c874 in free () from /lib/libc.so.5
#3 0x284a036b in operator delete () from /usr/local/lib/gcc-4.2.3/libstdc++.so.6
#4 0x2848220f in std::string::_Rep::_M_destroy () from /usr/local/lib/gcc-4.2.3/libstdc++.so.6
#5 0x28483af2 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string ()
from /usr/local/lib/gcc-4.2.3/libstdc++.so.6
#6 0x28297ff1 in direct_handler_ns::direct_handler::process_response () from /usr/local/libexec/apache/apache_module.so
#7 0x2830ffeb in CKqueueSheduler::ProcessRecvMessages () from /usr/local/libexec/apache/apache_module.so
#8 0x28310350 in CKqueueSheduler::WaitQuote () from /usr/local/libexec/apache/apache_module.so
#9 0x2831121c in CKqueueSheduler::Process () from /usr/local/libexec/apache/apache_module.so
#10 0x2824a20c in sc_core_ns::processor_core::handler () from /usr/local/libexec/apache/apache_module.so
#11 0x28225d51 in process_request () from /usr/local/libexec/apache/apache_module.so

Пример 2.
#0 0x2813037b in kill () from /lib/libc.so.5
#1 0x28125422 in raise () from /lib/libc.so.5
#2 0x28197c1b in abort () from /lib/libc.so.5
#3 0x2813b5b9 in ldexp () from /lib/libc.so.5
#4 0x2813c3de in ldexp () from /lib/libc.so.5
#5 0x2813c743 in ldexp () from /lib/libc.so.5
#6 0x2813c874 in free () from /lib/libc.so.5
#7 0x284a036b in operator delete () from /usr/local/lib/gcc-4.2.3/libstdc++.so.6
#8 0x2848220f in std::string::_Rep::_M_destroy () from /usr/local/lib/gcc-4.2.3/libstdc++.so.6
#9 0x28483af2 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string ()
from /usr/local/lib/gcc-4.2.3/libstdc++.so.6
#10 0x282cc6f5 in yandex_handler_ns::yandex_handler::process_response () from /usr/local/libexec/apache/apache_module.so
#11 0x2830ffeb in CKqueueSheduler::ProcessRecvMessages () from /usr/local/libexec/apache/apache_module.so
#12 0x28310350 in CKqueueSheduler::WaitQuote () from /usr/local/libexec/apache/apache_module.so
#13 0x2831121c in CKqueueSheduler::Process () from /usr/local/libexec/apache/apache_module.so
#14 0x2824a20c in sc_core_ns::processor_core::handler () from /usr/local/libexec/apache/apache_module.so
#15 0x28225d51 in process_request () from /usr/local/libexec/apache/apache_module.so
#16 0x2826377e in apache_module_handler () from /usr/local/libexec/apache/apache_module.so
Re: Падает апач в libstdc++
От: jazzer Россия Skype: enerjazzer
Дата: 12.02.08 09:59
Оценка:
Здравствуйте, Vadya, Вы писали:

V>Были подозрения на то, что использовали разные версии либок libstdc++ и libc


Скорее всего так и есть.
проверь ВСЕ свои библиотеки, что они собраны с одними и теми же libstdc++ и libc, причем, если речь идет о линуксе, то для одного и того же дистрибутива.
Или собери все сам с нуля, если есть возможность.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Падает апач в libstdc++
От: zaufi Земля  
Дата: 12.02.08 11:43
Оценка:
Здравствуйте, Vadya, Вы писали:

V>Собственно сабж.

V>Апач вот такой Apache/1.3.34
V>компилятор апачевского модуля gcc42

V>Модулл для апача падает всё время в разных местах libstdc++,

V>в основном во всяких стд-шных конструкциях, примеры ниже.
V>в коде никакого динамического выделения памяти не происходит
V>сплошные std контейнеры.
V>Никакой замены стандартных sdt алокаторов тоже не делал.

V>Были подозрения на то, что использовали разные версии либок libstdc++ и libc

V>в этом апачевском модуле используються вот такие либы
не скорее всетаки не это... -- у тя не грузился бы модуль нормально ругаясь на всякие символы типа GLIBC_2.N или там GCC_4.X.Y...

V>Уже весь мозг сломал не пойму в чем дело.


приведенные быктрэйсы выглядят как типичное удаление невалидной строки...
что были за строки то? чонить прочитанное из конфигов модуля?

не забываем также о том что апач на лету форкает процессы и\или threadы и также внезапно их мочит... -- отсуда большенство проблем с деструкторами при написании модулей на С++...

использовать stdшные контейнеры с дефолтным аллокатором нада оч осторожно... у апача свой memory management и свои понятия о времени жизни объектов (часто не совпадающие с С++ными)

если код не сильно наворочен (ну там без буста например ) буит немного проще если сделать свой аллокатор работающий с апачными пулами и инстанциировать им используемые контейнеры...


namespace apr {

/**
 * \brief STL compatible allocator layed over APR pools
 */
template <typename T>
class pool_allocator
{
...
};

typedef std::basic_string<
    char
  , std::char_traits<char>
  , pool_allocator<char>
  > string;

}


но конечно же есть и сложности...
Re: Падает апач в libstdc++
От: Vadya  
Дата: 12.02.08 11:49
Оценка:
Забыл написать, падает он от вот этого
Program terminated with signal 11, Segmentation fault.
Re[2]: Падает апач в libstdc++
От: Аноним  
Дата: 13.02.08 21:29
Оценка:
Здравствуйте, Vadya, Вы писали:

V>Забыл написать, падает он от вот этого

V>Program terminated with signal 11, Segmentation fault.

Обращение к невалидной памяти

Выдержка из мана

Signal Value Action Term

SIGSEGV 11 Core Invalid memory reference

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.