Добавить новость





160*600

Новости сегодня на DirectAdvert

Новости сегодня от Adwile

Актуальные новости сегодня от ValueImpression.com


Опубликовать свою новость бесплатно - сейчас


Фикс бага в коде, использующем Boost IPC

Environment:

OS: FreeBSD 11.0-RELEASE-p2 #0: Mon Oct 24 06:55:27 UTC 2016 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC amd64 Boost: boost-libs-1.63.0_1 Clang: FreeBSD clang version 3.8.0 (tags/RELEASE_380/final 262564) (based on LLVM 3.8.0) Description: program creates few named maps (boost::interprocess::map) in a shared memory (one map of custom structs and one map of sets (boost::interprocess::set)). Then multiple processes start to add elements into both maps concurrently. Each element has "time to live" value and "purge_expired" function is being called on each insertion. Named inter-process mutexes are being used for synchronizing access to each map.

Steps to reproduce:

1. Unpack attached archive to some folder (e.g. /tmp/testzero) 2. mkdir /tmp/testzero/build; cd /tmp/testzero/build; cmake ..; make 3. Run testzero (note: requires at least 4GB or RAM) Expected: program should pass all cycles and exit successfully
Actual: program crashes after several seconds of execution (depends on CPU) When additional logging is enabled, we can often see two different processes pass "mutex lock" and changing same map simultaneously which leads to an exception.

The issue is reproducible only when flags -O2 or -O3 are being used otherwise code works as expected.

A stack dump:

#0 boost::intrusive::rbtree_algorithms<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, true> >::rebalance_after_insertion ( header=<value optimized out>, p=<value optimized out>) at offset_ptr.hpp:728 728 n.priv_offset() = tmp; [New Thread 801a16000 (LWP 100862/<unknown>)] (gdb) bt #0 boost::intrusive::rbtree_algorithms<boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, true> >::rebalance_after_insertion ( header=<value optimized out>, p=<value optimized out>) at offset_ptr.hpp:728 #1 0x0000000000404c62 in boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>::priv_deallocate ( this=<value optimized out>, addr=<value optimized out>) at rbtree_algorithms.hpp:388 #2 0x00000000004045ad in boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>::deallocate ( this=0x801c00010, addr=0x8028e32e1) at rbtree_best_fit.hpp:1321 #3 0x00000000004044df in boost::container::container_detail::private_node_pool_impl<boost::interprocess::segment_manager_base<boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul> > >::purge_blocks (this=0x8028e31f0) at segment_manager.hpp:227 #4 0x00000000004117b9 in boost::container::container_detail::node_alloc_holder<boost::interprocess::private_node_allocator<unsigned long, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>, boost::interprocess::iset_index>, 64ul>, boost::intrusive::rbtree_impl<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<unsigned long, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, void, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<unsigned long, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, (boost::container::tree_type_enum)0, true>, boost::intrusive::tree_value_compare<boost::interprocess::offset_ptr<unsigned long, long, unsigned long, 0ul>, std::__1::less<unsigned long>, boost::move_detail::identity<unsigned long>, true> >, unsigned long, true, void> >::~node_alloc_holder (this=0x8028e31f0) at node_pool_impl.hpp:88 #5 0x000000000041190f in boost::intrusive::bstree_impl<boost::intrusive::bhtraits<boost::container::container_detail::tree_node<std::__1::pair<unsigned long const, shared_memory::MappedValType<boost::container::set<unsigned long, std::__1::less<unsigned long>, boost::interprocess::private_node_allocator<unsigned long, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>, boost::interprocess::iset_index>, 64ul>, boost::container::tree_opt<(boost::container::tree_type_enum)0, true> > > >, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, (boost::container::tree_type_enum)0, true>, boost::intrusive::rbtree_node_traits<boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, true>, (boost::intrusive::link_mode_type)0, boost::intrusive::dft_tag, 3u>, void, boost::container::value_to_node_compare<boost::container::container_detail::tree_node<std::__1::pair<unsigned long const, shared_memory::MappedValType<boost::container::set<unsigned long, std::__1::less<unsigned long>, boost::interprocess::private_node_allocator<unsigned long, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>, boost::interprocess::iset_index>, 64ul>, boost::container::tree_opt<(boost::container::tree_type_enum)0, true> > > >, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, (boost::container::tree_type_enum)0, true>, boost::intrusive::tree_value_compare<boost::interprocess::offset_ptr<std::__1::pair<unsigned long const, shared_memory::MappedValType<boost::container::set<unsigned long, std::__1::less<unsigned long>, boost::interprocess::private_node_allocator<unsigned long, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>, boost::interprocess::iset_index>, 64ul>, boost::container::tree_opt<(boost::container::tree_type_enum)0, true> > > >, long, unsigned long, 0ul>, std::__1::less<unsigned long>, boost::container::container_detail::select1st<unsigned long>, false> >, unsigned long, true, (boost::intrusive::algo_types)5, void>::erase_and_dispose<boost::container::container_detail::allocator_destroyer<boost::interprocess::allocator<boost::container::container_detail::tree_node<std::__1::pair<unsigned long const, shared_memory::MappedValType<boost::container::set<unsigned long, std::__1::less<unsigned long>, boost::interprocess::private_node_allocator<unsigned long, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>, boost::interprocess::iset_index>, 64ul>, boost::container::tree_opt<(boost::container::tree_type_enum)0, true> > > >, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, (boost::container::tree_type_enum)0, true>, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>, boost::interprocess::iset_index> > > > (this=<value optimized out>, i=<value optimized out>) at /tmp/testzero/main.cpp:64 #6 0x000000000040ee97 in shared_memory::Map<unsigned long, boost::container::set<unsigned long, std::__1::less<unsigned long>, boost::interprocess::private_node_allocator<unsigned long, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void, long, unsigned long, 0ul>, 0ul>, boost::interprocess::iset_index>, 64ul>, boost::container::tree_opt<(boost::container::tree_type_enum)0, true> > >::purge_expired (this=0x7fffffffea18, it=<value optimized out>, count=2) at tree.hpp:1101 #7 0x0000000000403a0d in shared_memory::MapSet<unsigned long, unsigned long>::add (this=0x7fffffffea18, k=@0x7fffffffe8c0, val=@0x7fffffffe8b8, expires=<value optimized out>) at /tmp/testzero/main.cpp:197 #8 0x0000000000402a4f in upd1 (map_foo=<value optimized out>, map_of_sets=@0x7fffffffea18, fstruct=@0x7fffffffe910) at /tmp/testzero/main.cpp:250 #9 0x0000000000402f0e in main (argc=<value optimized out>, argv=<value optimized out>) at /tmp/testzero/main.cpp:298


Загрузка...

Читайте на сайте

Другие проекты от 123ru.net








































Другие популярные новости дня сегодня


123ru.net — быстрее, чем Я..., самые свежие и актуальные новости Вашего города — каждый день, каждый час с ежеминутным обновлением! Мгновенная публикация на языке оригинала, без модерации и без купюр в разделе Пользователи сайта 123ru.net.

Как добавить свои новости в наши трансляции? Очень просто. Достаточно отправить заявку на наш электронный адрес mail@29ru.net с указанием адреса Вашей ленты новостей в формате RSS или подать заявку на включение Вашего сайта в наш каталог через форму. После модерации заявки в течении 24 часов Ваша лента новостей начнёт транслироваться в разделе Вашего города. Все новости в нашей ленте новостей отсортированы поминутно по времени публикации, которое указано напротив каждой новости справа также как и прямая ссылка на источник информации. Если у Вас есть интересные фото Вашего города или других населённых пунктов Вашего региона мы также готовы опубликовать их в разделе Вашего города в нашем каталоге региональных сайтов, который на сегодняшний день является самым большим региональным ресурсом, охватывающим все города не только России и Украины, но ещё и Белоруссии и Абхазии. Прислать фото можно здесь. Оперативно разместить свою новость в Вашем городе можно самостоятельно через форму.



Новости 24/7 Все города России




Загрузка...


Топ 10 новостей последнего часа






Персональные новости

123ru.net — ежедневник главных новостей Вашего города и Вашего региона. 123ru.net - новости в деталях, свежий, незамыленный образ событий дня, аналитика минувших событий, прогнозы на будущее и непредвзятый взгляд на настоящее, как всегда, оперативно, честно, без купюр и цензуры каждый час, семь дней в неделю, 24 часа в сутки. Ещё больше местных городских новостей Вашего города — на порталах News-Life.pro и News24.pro. Полная лента региональных новостей на этот час — здесь. Самые свежие и популярные публикации событий в России и в мире сегодня - в ТОП-100 и на сайте Russia24.pro. С 2017 года проект 123ru.net стал мультиязычным и расширил свою аудиторию в мировом пространстве. Теперь нас читает не только русскоязычная аудитория и жители бывшего СССР, но и весь современный мир. 123ru.net - мир новостей без границ и цензуры в режиме реального времени. Каждую минуту - 123 самые горячие новости из городов и регионов. С нами Вы никогда не пропустите главное. А самым главным во все века остаётся "время" - наше и Ваше (у каждого - оно своё). Время - бесценно! Берегите и цените время. Здесь и сейчас — знакомства на 123ru.net. . Разместить свою новость локально в любом городе (и даже, на любом языке мира) можно ежесекундно (совершенно бесплатно) с мгновенной публикацией (без цензуры и модерации) самостоятельно - здесь.



Загрузка...

Загрузка...

Экология в России и мире




Путин в России и мире

Лукашенко в Беларуси и мире



123ru.netмеждународная интерактивная информационная сеть (ежеминутные новости с ежедневным интелектуальным архивом). Только у нас — все главные новости дня без политической цензуры. "123 Новости" — абсолютно все точки зрения, трезвая аналитика, цивилизованные споры и обсуждения без взаимных обвинений и оскорблений. Помните, что не у всех точка зрения совпадает с Вашей. Уважайте мнение других, даже если Вы отстаиваете свой взгляд и свою позицию. Smi24.net — облегчённая версия старейшего обозревателя новостей 123ru.net.

Мы не навязываем Вам своё видение, мы даём Вам объективный срез событий дня без цензуры и без купюр. Новости, какие они есть — онлайн (с поминутным архивом по всем городам и регионам России, Украины, Белоруссии и Абхазии).

123ru.net — живые новости в прямом эфире!

В любую минуту Вы можете добавить свою новость мгновенно — здесь.






Здоровье в России и мире


Частные объявления в Вашем городе, в Вашем регионе и в России






Загрузка...

Загрузка...





Друзья 123ru.net


Информационные партнёры 123ru.net



Спонсоры 123ru.net