Здравствуйте, Feonyf, Вы писали:
F>Смотрю на код в бусте внутри call_once
F>void* const mutex_handle(::boost::detail::create_once_mutex(&flag)); F>BOOST_ASSERT(mutex_handle);
F>только ассерт ? А что будет если ::boost::detail::create_once_mutex возвратит ошибку, например в результате нехватки ресурсов ?
ничего,
если вы уж полезли в дебри boost, то могли бы посмотреть, что функция
::boost::detail::create_once_mutex(&flag)
возвращает void* ( что скорее всего HANDLE объекта ), посему ассерт вполне по месту для отладочной версии
в релизе будет неудачное создание объекта и скорее всего INVALID_HANDLE_VALUE
что вполне допустимо для winapi
и потом как реагировать когда ресурсов нет... прикрвать приолжение... кидать исключение...
это уже вопрос дискусии
Здравствуйте, Feonyf, Вы писали:
F>1. где же "защитники" буста ? F>2. где защитники надежного софта ?
F>кстати, про буст. Я тут решил переехать с Loki::SmartPtr на boost::shared_ptr и наткнулся на проблему:
Здравствуйте, ioni, Вы писали:
I>что вполне допустимо для winapi
да. Windows тут неслабое место I>и потом как реагировать когда ресурсов нет... прикрвать приолжение... кидать исключение...
исключение кидать. std::bad_alloc ведь кидается когда памяти нет...
Я одно точно знаю: игнорировать нельзя
Здравствуйте, ioni, Вы писали:
I>Привели бы код оишбки компилятора что ли
проект http://files.rsdn.ru/46977/testPtr.7z
компилятор говорит это:
1>------ Build started: Project: testPtr, Configuration: Debug Win32 ------ 1>Compiling... 1>stdafx.cpp 1>Compiling... 1>testPtr.cpp 1>c:\program files\microsoft visual studio 9.0\vc\include\algorithm(40) : error C2679: binary '==' : no operator found which takes a right-hand operand of type 'wmain::MyClass *const ' (or there is no acceptable conversion) 1> could be 'built-in C++ operator==(wmain::MyClass *boost::shared_ptr<T>::* , wmain::MyClass *boost::shared_ptr<T>::* )' 1> with 1> [ 1> T=wmain::MyClass 1> ] 1> or 'built-in C++ operator==(wmain::MyClass *, wmain::MyClass *)' 1> while trying to match the argument list '(boost::shared_ptr<T>, wmain::MyClass *const )' 1> with 1> [ 1> T=wmain::MyClass 1> ] 1> c:\program files\microsoft visual studio 9.0\vc\include\algorithm(74) : see reference to function template instantiation '_InIt std::_Find<std::_Vector_iterator<_Ty,_Alloc>,wmain::MyClass>(_InIt,_InIt,wmain::MyClass &)' being compiled 1> with 1> [ 1> _InIt=std::_Vector_iterator<MyClassPtr,std::allocator<MyClassPtr>>, 1> _Ty=MyClassPtr, 1> _Alloc=std::allocator<MyClassPtr> 1> ] 1> c:\users\user\desktop\testptr\testptr.cpp(22) : see reference to function template instantiation '_InIt std::find<std::_Vector_iterator<_Ty,_Alloc>,wmain::MyClass*>(_InIt,_InIt,wmain::MyClass &)' being compiled 1> with 1> [ 1> _InIt=std::_Vector_iterator<MyClassPtr,std::allocator<MyClassPtr>>, 1> _Ty=MyClassPtr, 1> _Alloc=std::allocator<MyClassPtr> 1> ] 1>Build Time 0:03 1>Build log was saved at "file://c:\Users\user\Desktop\testPtr\Debug\BuildLog.htm" 1>testPtr — 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Здравствуйте, Feonyf, Вы писали:
F>Смотрю на код в бусте внутри call_once
F>void* const mutex_handle(::boost::detail::create_once_mutex(&flag)); F>BOOST_ASSERT(mutex_handle);
F>только ассерт ? А что будет если ::boost::detail::create_once_mutex возвратит ошибку, например в результате нехватки ресурсов ?
И всё-таки не думаю, что оно часто падает.
Нужно тройное совпадение — одновременная инициализация, первая инициализация и нехватка ресурсов.
Здравствуйте, Alexander G, Вы писали:
AG>И всё-таки не думаю, что оно часто падает. AG>Нужно тройное совпадение — одновременная инициализация, первая инициализация и нехватка ресурсов.
Согласен.
Однако более надежно когда ошибки не игнорируются. boost это серьёзная библиотека, а серьезная библиотека должна обрабатывать нехватку ресурсов.
Здравствуйте, ioni, Вы писали:
I>и потом как реагировать когда ресурсов нет...
кстати есть такая утилитка consume.exe от Microsoft с помощью неё можно проводить стрессовое тестирование: сожрать память или kernel pool. Mutex как раз к kernel pool относится