Здравствуйте, niXman, Вы писали:
X>для начала, привести backtrace.
Извиняюсь, приведенный ранее пример не воспроизводит креш. Но все равно не работает как положено.
При компиляции с опцией -std=c++11 происходит непонятный сбой внутри server.stop(), полагаю зацикливание.
После входа в stop() загрузка процессора возростает до 100%.
#0 0x000000000044b320 in boost::asio::detail::op_queue_access::next<boost::asio::detail::task_io_service_operation, boost::asio::detail::task_io_service_operation> (o1=@0x1e48780:
0x1, o2=0x1e6b730) at /usr/include/boost/asio/detail/op_queue.hpp:41
#1 0x000000000044a158 in boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>::push<boost::asio::detail::task_io_service_operation> (this=0x1e48778, q=...
) at /usr/include/boost/asio/detail/op_queue.hpp:127
#2 0x000000000044865c in boost::asio::detail::task_io_service::post_deferred_completions (this=0x1e486f0, ops=...) at /usr/include/boost/asio/detail/impl/task_io_service.ipp:309
#3 0x0000000000494736 in boost::asio::detail::epoll_reactor::deregister_descriptor (this=0x1e48820, descriptor=13, descriptor_data=@0x752768: 0x0, closing=true) at /usr/include/bo
ost/asio/detail/impl/epoll_reactor.ipp:315
#4 0x00007f8120c908a0 in boost::asio::detail::reactive_socket_service_base::close(boost::asio::detail::reactive_socket_service_base::base_implementation_type&, boost::system::erro
r_code&) () from /usr/lib/libpion-net-4.0.so
#5 0x00007f8120c93d3f in boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> >::close() () from /usr/lib/libpion-ne
t-4.0.so
#6 0x00007f8120c89eb6 in pion::net::TCPServer::stop(bool) () from /usr/lib/libpion-net-4.0.so
#7 0x0000000000491bd4 in TermHandler () at src/main.cpp:101
#8 <signal handler called>
#9 0x00007f811ea9e2d4 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0
#10 0x00007f8120c895a6 in pion::net::TCPServer::join() () from /usr/lib/libpion-net-4.0.so
#11 0x000000000049247d in main (argc=1, argv=0x7fff90cb6308) at src/main.cpp:202
пришел SIGINT (я с консоли его отправил).
X>можешь показать код, который создает эту проблему? желательно, компилябельный.
Весь код не показать. Буду стараться со временем привести пример который все-таки крашится.
Суть того что есть сейчас такова, но опять же не крашится, а только выснет намертво после
входа в server.stop().
я поэтому и спрашиваю именно о пионе, так как даже такой минимальный пример с -std=c++11 не работает, а с -std=c++98 — работает. Основное же приложение, которое ранее компилилось с опцией -std=c++98, работает месяцами, а с -std=c++11 не принимает входящие соединения (суть та же, при входещем соединении загрузка проца возростает до 100% и приложение виснет намертво) и при выходе крашится.
Здравствуйте, real_sba, Вы писали:
_>пришел SIGINT (я с консоли его отправил).
ясно.
_>Суть того что есть сейчас такова, но опять же не крашится, а только выснет намертво после _>входа в server.stop().
это пробовал? если есть зацикливание, ты поймешь.
да и просто, может быть порядок вызовов хендлеров о чем-то скажет...
и да, без примера воспроизводящего проблему, гадать можно долго %)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>это пробовал? если есть зацикливание, ты поймешь. X>да и просто, может быть порядок вызовов хендлеров о чем-то скажет...
Только что попробовал на тестовом примере. Вызов server.start() сегфолтится на обоих конфигурациях (-std=c++98, -std=c++11).
X>и да, без примера воспроизводящего проблему, гадать можно долго %)
Так пример выше. Перефразирую тогда вопрос и проблему.
Даже минимальное приложение которое ничего не должно делать кроме как принимать входящие соединения
с опцией -std=c++98 работает ожидаемо, то-есть принимает соединения, печатает "test", не создает какую либо ощутимую нагрузку на процессор.
Тот же код, собранный с опцией -std=c++11, в режиме ожидания никак себя не проявляет, а стоит только получить первое входящее соединение — загружает проц на 100%, и не печатает ничего в консоль. Конечно же не крашится.... но я бы сказал — все равно слегка работает не так как надо.
Здравствуйте, real_sba, Вы писали:
_>Только что попробовал на тестовом примере. Вызов server.start() сегфолтится на обоих конфигурациях (-std=c++98, -std=c++11).
и никакого трекинга хендлеров не видно? оО
X>>и да, без примера воспроизводящего проблему, гадать можно долго %) _>Так пример выше. Перефразирую тогда вопрос и проблему. _>Даже минимальное приложение которое ничего не должно делать кроме как принимать входящие соединения
_>с опцией -std=c++98 работает ожидаемо, то-есть принимает соединения, печатает "test", не создает какую либо ощутимую нагрузку на процессор. _>Тот же код, собранный с опцией -std=c++11, в режиме ожидания никак себя не проявляет, а стоит только получить первое входящее соединение — загружает проц на 100%, и не печатает ничего в консоль. Конечно же не крашится.... но я бы сказал — все равно слегка работает не так как надо.
понял
завтра с утра попробую разобраться.
кстати, libpion ты сам собирал? или из менеджера пакетов? тогда укажи версию libpion и boost.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
_>>Только что попробовал на тестовом примере. Вызов server.start() сегфолтится на обоих конфигурациях (-std=c++98, -std=c++11). X>и никакого трекинга хендлеров не видно? оО
не видно, код сегфолтится прямо в server.start(), так что до хендлеров еще не дошло
X>кстати, libpion ты сам собирал? или из менеджера пакетов? тогда укажи версию libpion и boost.
Все библиотеки из менеджера пакетов.
Debian testing.
boost: 1.49.0-3.2
libpion-common-4.0: 4.0.7+dfsg-3.1
libpion-net-4.0: 4.0.7+dfsg-3.1
libpion-net-dev: 4.0.7+dfsg-3.1
liblog4cpp5: 1.0-4
Здравствуйте, real_sba, Вы писали:
_>Все библиотеки из менеджера пакетов. _>Debian testing. _>boost: 1.49.0-3.2 _>libpion-common-4.0: 4.0.7+dfsg-3.1 _>libpion-net-4.0: 4.0.7+dfsg-3.1 _>libpion-net-dev: 4.0.7+dfsg-3.1 _>liblog4cpp5: 1.0-4
до самоличной проверки твоей ситуации я все таки не добрался, но читая список рассылки совсем о другой проблеме, вспомнил, что использование '-std=с++11' ломает ABI предыдущего стандарта.
поэтому, предлагаю чтоб ты пересобрал используемые библиотеки.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)