суббота, 3 июля 2010 г.

Ошибка Chris-а или странная логика

Нашел баг в Boost.Asio (Boost 1.42 и 1.43 - другие просто не проверял).
Самое неприятное заключается в том, что в первых версиях Boost.Asio такого не было и в том, что это скорее довольно грубая логическая ошибка, чем опечатка.

3 комментария:

Sergey комментирует...

кхммм... не подскажете, а этот кусочек кода для чего используется?


в настоящий момент выбираю платформу для кода. В качестве сетевой библиотеки остановился на asio... И если указанные строчки грозят моему приложению безвременной кончиной, я лучше возьму что-нибудь постарше...

Marat комментирует...

Updated: с Boost 1.44 этот баг воспроизвести не удалось. Исходный код Asio из-за использования макроса пока не "понят" мной в степени, достаточной для того, чтобы гарантировать отсутствие описанного бага. Но факт остается фактом - ни одна из попыток воспроизвести баг успехом не увенчалась.

Marat комментирует...

to Sergey:
Условие падения примерно такое:
1) Ваше приложение использует Boost.Asio из Boost C++ Libraries версии < 1.44
и
2) Вы используете asio custom memory allocation по аналогии с тем примером, что есть в документации Boost.Asio
и
3) Вы "удерживаете" custom memory storage (еще и) за счет handler-а (или надеетесь, что "удержание handler-ом" сработает)

Таким образом... я сомневаюсь, что Вы когда-нибудь найдете этот баг - почему-то кроме меня (сужу по Google) еще никто не использовал все это вместе. Хотя без custom memory allocation я считаю Boost.Asio не применимым в практических целях (да, я идеалист и хочу 100% ускрорение всего, что можно).

> я лучше возьму что-нибудь постарше...

из "старших" аналогов есть только ACE - это еще та куча костылей на макросах.