вопрос по работе pthread
Вопрос следующий может ли дочерний процесс порождать свои дочерние процессы?
Столкнулся с траблой, библиотека libptreads.so.1, ОС FreeBSD 5.4. Порождаю поток который слушает входящие соединия, при поступлении входящего запроса создает отдельный поток для обработки. Падает в кору.
Заранее благодарен
А какие-нибудь подробности есть еще?
+ Пятерки нет под рукой, могу попробовать на семерке релизовской для чистоты эксперимента.
Вопрос следующий может ли дочерний процесс порождать свои дочерние процессы?
Столкнулся с траблой, библиотека libptreads.so.1, ОС FreeBSD 5.4. Порождаю поток который слушает входящие соединия, при поступлении входящего запроса создает отдельный поток для обработки. Падает в кору.
Заранее благодарен
а на код можно взглянуть? а то вопрос очень странно сформулирован.
ЗЫ: 5.4?? зачем вам этот динозавр?
Может ли дочерний поток порождать новые потоки.
gdb говорит так:
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd"...
Core was generated by `interconsole'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/libkvm.so.2...done.
Loaded symbols for /lib/libkvm.so.2
Reading symbols from /usr/lib/libxml2.so.8...done.
Loaded symbols for /usr/lib/libxml2.so.8
Reading symbols from /lib/libncurses.so.5...done.
Loaded symbols for /lib/libncurses.so.5
Reading symbols from /usr/lib/libdialog.so.4...done.
Loaded symbols for /usr/lib/libdialog.so.4
Reading symbols from /usr/lib/libpthread.so.1...done.
Loaded symbols for /usr/lib/libpthread.so.1
Reading symbols from /lib/libc.so.5...done.
Loaded symbols for /lib/libc.so.5
Reading symbols from /usr/lib/libiconv.so.6...done.
Loaded symbols for /usr/lib/libiconv.so.6
Reading symbols from /usr/lib/libstdc++.so.4...done.
Loaded symbols for /usr/lib/libstdc++.so.4
Reading symbols from /lib/libm.so.3...done.
Loaded symbols for /lib/libm.so.3
Reading symbols from /libexec/ld-elf.so.1...done.
Loaded symbols for /libexec/ld-elf.so.1
#0 0x2820031b in pthread_testcancel () from /usr/lib/libpthread.so.1
(gdb) bt
#0 0x2820031b in pthread_testcancel () from /usr/lib/libpthread.so.1
#1 0x281f8902 in pthread_mutexattr_init () from /usr/lib/libpthread.so.1
#2 0x00000000 in ?? ()
(gdb)
Сам код к сожалению выложить не могу. Буду благодарен хотя бы за данное направление поисков. Из того что нашел было только невнятное "поврежден стэк". По логам по-крайней мере понятно, что поток запускается и валится внутри. Я вот подумал, может проблема в каком то отсутствующем патче. Потому что код уже прочесал вдоль и поперек.
Использование такой ОС поставлено в задаче.
Спасибо
Может. А что ему мешает это сделать? Важно понимать что из себя представляет еденица - поток, каким образом настраиваются ресурсы выделяемые еденичному потоку и что еще более важно - правильный контроль потовок и избежание борьбы за ресурсы между потоками в пределах одного процесса, а так же попадание потоков в "мертвую блокировку". Литературку почетать вам точно не мешало бы.....
[QUOTE=sedoylev ]Core was generated by `interconsole'.
Program terminated with signal 11, Segmentation fault.[/QUOTE]
Не о чем не говорит? Более чем похоже на ошибку при работе с ФС - или недостаточно места в разделе (вызванное переполнением) или же ошибка записи по правам доступа.....
[QUOTE=sedoylev]#0 0x2820031b in pthread_testcancel () from /usr/lib/libpthread.so.1
#1 0x281f8902 in pthread_mutexattr_init () from /usr/lib/libpthread.so.1
#2 0x00000000 in ?? ()[/QUOTE]
ошибка переполнения (эсли таковая имеет место быть) могла быть вызванна неправильной/ошибочной работой с мьютексами.
[QUOTE=sedoylev]Сам код к сожалению выложить не могу.[/QUOTE]
тогда и мы вам помочь ни чем не можем.
[QUOTE=sedoylev]Я вот подумал, может проблема в каком то отсутствующем патче. Потому что код уже прочесал вдоль и поперек.[/QUOTE]
дык к тому же не очень осведомлены о системе установки ПО во FreeBSD......
патчи присутствуют с системе портов и при сборке пакеджа из сорцев, с помощью этих самых портов, патчи майнтайнеров и накладываються на сорцы скаченные с репозитариев. Обновите локальное дерево портов и соберите новые библиотеки или же установите новые версии библиотек при помощи пакеджей (что будет менее накладнее).
[QUOTE=sedoylev]Использование такой ОС поставлено в задаче. [/QUOTE]
Извиняюсь, но....задача глупа изначально.
По поводу комментариев:
Если уж читать до конца все что пишет gdb то получается что ошибка вызвана вызовом соответствующих функций внутри библиотеки libpthread, судя по стеку внутри pthread_testcancel вызывалась функция pthread_mutexattr_init, которая и вызвала сбой. Я мутексы не трогал.
Спасибо вам уважаемый за желание помочь, но видимо вы плохо представляете себе что такое работа с заказчиком и кто говорит какая ОС должна использоваться, будет ли она иметь выход в сеть и даже какая версия ОС и какие обновления. Глупая не глупая, но это задача направленная на конкретное промышленное решение, здесь не стоит вопрос красивости решения или оптимальности, здесь стоит вопрос как сделать из того что есть то что работает и работает как надо. Грубо говоря, "вот тебе две палки и веревка, на большее нет желания, возможностей и денег. сделай качели".
В любом случае большое спасибо.
Спасибо вам уважаемый за желание помочь, но видимо вы плохо представляете себе что такое работа с заказчиком и кто говорит какая ОС должна использоваться, будет ли она иметь выход в сеть и даже какая версия ОС и какие обновления.
:) ну да. мы все - 13-ти летние пионеры. есть такой закон в бизнесе - если заказчик идиот - с ним дешевле не работать. 5.4 - ветка, во-первых, не поддерживаемая, а во-вторых - вся пятая ветка была экспериментальной, по большому счету. и говорить о промышленных решениях тут как-то странно.
впрочем ладно, дело ваше. а проблема то как решилась?
Спасибо вам уважаемый за желание помочь, но видимо вы плохо представляете себе что такое работа с заказчиком и кто говорит какая ОС должна использоваться, будет ли она иметь выход в сеть и даже какая версия ОС и какие обновления. Глупая не глупая, но это задача направленная на конкретное промышленное решение, здесь не стоит вопрос красивости решения или оптимальности, здесь стоит вопрос как сделать из того что есть то что работает и работает как надо. Грубо говоря, "вот тебе две палки и веревка, на большее нет желания, возможностей и денег. сделай качели".
В любом случае большое спасибо.
Я понял вашу лирику, но абсолютно не ясна позиция и приоритет выбора....
Мне кажется нет ничего сложного в обновлении версии 5.4 до последней версии из ветки 6 или 7. И у вас меньше проблем и в конце концов вы ничего не теряете, а только приобретаете. Как ни погляди, но вы выступая в качестве специалиста вполне могли бы переубедить заказчика в некорректности принятого им решения и посоветовать более продуктивные предметы и методы решения проблемы.
Говорю так смело потому, что имею опыт работы с заказчиками разных "мастей" и нравов, так как на данный момент работаю в одном из ведущих Российских частных банков. И поверте, клиенты/заказчики бывают разные и с любым можно найти общий язык. По собственному опыту могу так смело высказаться :)
Если нафлудил, то извиняюсь...