有没有在升压ASIO HTTP服务器3例子或升压错误的错误? [英] Is there a bug in the boost asio HTTP Server 3 example or boost bug?

查看:332
本文介绍了有没有在升压ASIO HTTP服务器3例子或升压错误的错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Boost库版本1.53结果
Debian的Linux的6.0(在x86_64的Linux 2.6.32-5-AMD64)

这是很难测试时的valgrind日志中包含大量的警告自己的软件。结果
因此,与没有改变我建立了HTTP服务器3例及Valgrind的下运行它。结果
看看,谢谢。我错过了什么?

Valgrind的--tool = helgrind --log文件= valgrind.log ./server3 0.0.0.0 83 5 /根/服务器3结果
这里是Helgrind日志(编辑为30000体字符的限制,完整的日志 http://pastebin.com/Vkbr9vsA

  Helgrind,一个线程错误检测器
版权所有(C)2007-2012,和GNU GPL的,由OpenWorks LLP等。
使用Valgrind的-3.9.0.SVN和LibVEX;与-h版权信息重新运行
命令:./server3 0.0.0.0 83 5 /根/服务器3
父PID:8662在锁定了0x524F5E0首次观察
   在0x4C2C692:调用pthread_mutex_lock(hg_intercepts.c:495)
   通过0x5043388:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5043498:升压::详细:: set_current_thread_data(升压::详细:: thread_data_base *)(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x504380E:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x4C2D6FE:mythread_wrapper(hg_intercepts.c:219)
   通过0x5256B4F:start_thread(pthread_create.c:304)
   通过0x5CE5A7C:克隆(clone.S:112)通过线#3在0x524F4E8尺寸为8的读取过程中可能出现的数据竞赛
锁举行:无
   在0x5043356:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5043498:升压::详细:: set_current_thread_data(升压::详细:: thread_data_base *)(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x504380E:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x4C2D6FE:mythread_wrapper(hg_intercepts.c:219)
   通过0x5256B4F:start_thread(pthread_create.c:304)
   通过0x5CE5A7C:克隆(clone.S:112)这种冲突与线#2大小8的previous写
锁认为:1,地址0x524F5E0
   在0x5043416:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5043498:升压::详细:: set_current_thread_data(升压::详细:: thread_data_base *)(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x504380E:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x4C2D6FE:mythread_wrapper(hg_intercepts.c:219)
   通过0x5256B4F:start_thread(pthread_create.c:304)
   通过0x5CE5A7C:克隆(clone.S:112)-------------------------------------------------- --------------通过线#3在0x524F60C大小4的读取过程中可能出现的数据竞赛
锁举行:无
   在0x50496D4:升压::详细:: get_once_per_thread_epoch()(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5043361:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5043498:升压::详细:: set_current_thread_data(升压::详细:: thread_data_base *)(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x504380E:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x4C2D6FE:mythread_wrapper(hg_intercepts.c:219)
   通过0x5256B4F:start_thread(pthread_create.c:304)
   通过0x5CE5A7C:克隆(clone.S:112)这种冲突与线#2大小4的previous写
锁举行:无
   在0x525C27B:pthread_key_create(pthread_key_create.c:44)
   通过0x525C82F:调用pthread_once(pthread_once.S:104)
   通过0x50496D3:升压::详细:: get_once_per_thread_epoch()(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5043361:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5043498:升压::详细:: set_current_thread_data(升压::详细:: thread_data_base *)(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x504380E:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x4C2D6FE:mythread_wrapper(hg_intercepts.c:219)
   通过0x5256B4F:start_thread(pthread_create.c:304)-------------------------------------------------- --------------通过线#1在0x524F4E8尺寸为8的读取过程中可能出现的数据竞赛
锁认为:1,地址0x61A1E20
   在0x5043356:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5043478:提高::详细:: get_current_thread_data()(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5047875:提高::详细:: interruption_checker :: interruption_checker(pthread_mutex_t *,* pthread_cond_t的)(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5044002:提高::螺纹:: join_noexcept()(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x42660E:升压::螺纹:: join()方法(thread.hpp:751)
   通过0x4215C5:HTTP服务器3 :: ::服务器:: run()的(server.cpp:63)
   通过0x41A65B:主(main.cpp中:37)-------------------------------------------------- --------------通过线#1在0x524F60C大小4的读取过程中可能出现的数据竞赛
锁认为:1,地址0x61A1E20
   在0x50496D4:升压::详细:: get_once_per_thread_epoch()(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5043361:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5043478:提高::详细:: get_current_thread_data()(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5047875:提高::详细:: interruption_checker :: interruption_checker(pthread_mutex_t *,* pthread_cond_t的)(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5044002:提高::螺纹:: join_noexcept()(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x42660E:升压::螺纹:: join()方法(thread.hpp:751)
   通过0x4215C5:HTTP服务器3 :: ::服务器:: run()的(server.cpp:63)
   通过0x41A65B:主(main.cpp中:37)这种冲突与线#2大小4的previous写
锁举行:无
   在0x525C27B:pthread_key_create(pthread_key_create.c:44)
   通过0x525C82F:调用pthread_once(pthread_once.S:104)
   通过0x50496D3:升压::详细:: get_once_per_thread_epoch()(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5043361:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x5043498:升压::详细:: set_current_thread_data(升压::详细:: thread_data_base *)(在/usr/lib/libboost_thread.so.1.53.0)
   通过0x504380E:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x4C2D6FE:mythread_wrapper(hg_intercepts.c:219)
   通过0x5256B4F:start_thread(pthread_create.c:304)-------------------------------------------------- --------------通过线#6在0x61A36B8大小4的写入过程中可能出现的数据竞赛
锁举行:无
   在0x4223B0:提高:: ASIO ::详细:: epoll_reactor :: descriptor_state :: set_ready_events(无符号整数)(epoll_reactor.hpp:68)
   通过0x4228A5:提高:: ASIO ::详细:: epoll_reactor ::运行(BOOL,提高:: ASIO ::详细:: op_queue<提高:: ASIO ::详细:: task_io_service_operation>&安培;)(epoll_reactor.ipp:430 )
   由0x423629: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&,提高:: ASIO ::详细:: task_io_service_thread_info和放大器;,提振::系统::错误_ code常量和放大器;)(task_io_service.ipp:396)
   由0x423302:提高:: ASIO ::详细:: task_io_service ::运行(升压::系统::错误_ code&安培;)(task_io_service.ipp:153)
   通过0x42393A:提高:: ASIO :: io_service对象:: run()的(io_service.ipp:59)
   通过0x42EB34:提高:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&GT; ::运算符()(提高:: ASIO :: io_service对象*​​)常量(mem_fn_template.hpp:49)
   通过0x42EA72:unsigned long类型的boost :: _双:: list1的&LT;提高:: _双::值&LT;提高:: ASIO :: io_service对象*​​&GT; &GT; ::运算符()&LT;无符号长,提振:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&gt;中的boost :: _双:: list0&GT;(升压:: _双::类型&lt;无符号长&gt;中的boost :: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&GT;&放;,提振:: _双:: list0&安培;,长)(bind.hpp:243)
   通过0x42E91E:提高:: _双:: bind_t&LT;无符号长,提振:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&gt;中的boost :: _双:: list1的&LT;提高:: _双::值&LT;提高:: ASIO :: io_service对象*​​&GT; &GT; &GT; ::运算符()()(bind_template.hpp:20)
   通过0x42E65D:升压::详细:: thread_data&LT;提高:: _双:: bind_t&LT;无符号长,提振:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&gt;中的boost :: _双:: list1的&LT;提高:: _双::值&LT;提高:: ASIO :: io_service对象*​​&GT; &GT; &GT; &GT; :: run()的(thread.hpp:117)
   通过0x504381​​8:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x4C2D6FE:mythread_wrapper(hg_intercepts.c:219)
   通过0x5256B4F:start_thread(pthread_create.c:304)地址0x61A36B8是尺寸160 alloc'd块内24个字节
   在0x4C28A3A:运营商新的(无符号长)(vg_replace_malloc.c:298)
   通过0x42806A:提高:: ASIO ::详细:: epoll_reactor :: descriptor_state * boost::asio::detail::object_pool_access::create<boost::asio::detail::epoll_reactor::descriptor_state>() (object_pool.hpp:35)
   通过0x4267B8: boost::asio::detail::object_pool<boost::asio::detail::epoll_reactor::descriptor_state>::alloc() (object_pool.hpp:89)
   通过0x4229E3:提高:: ASIO ::详细:: epoll_reactor :: allocate_descriptor_state()(epoll_reactor.ipp:512)
   通过0x4223D4:提高:: ASIO ::详细:: epoll_reactor :: register_descriptor(INT,提高:: ASIO ::详细:: epoll_reactor :: descriptor_state *放大器;)(epoll_reactor.ipp:151)
   由0x424405: boost::asio::detail::reactive_socket_service_base::do_assign(boost::asio::detail::reactive_socket_service_base::base_implementation_type&, INT,INT常量和放大器;,提振::系统::错误_ code&安培;)(reactive_socket_service_base.ipp:182)
   通过0x42DA98: boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::assign(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&,提高:: ASIO ::知识产权:: TCP常量和放大器;,INT常量和放大器;,提振::系统::错误_ code&安培;)(reactive_socket_service.hpp:117)
   通过0x42D75C: boost::asio::stream_socket_service<boost::asio::ip::tcp>::assign(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&,提高:: ASIO ::知识产权:: TCP常量和放大器;,INT常量和放大器;,提振::系统::错误_ code&安培;)(stream_socket_service.hpp:138)
   通过0x42D263:提高:: ASIO :: basic_socket&LT;提高:: ASIO ::知识产权:: TCP,提高:: ASIO :: stream_socket_service&LT;提高:: ASIO ::知识产权:: TCP&GT; &GT; ::分配(提高:: ASIO ::知识产权:: TCP常量和放大器;,INT常量和放大器;,提振::系统::错误_ code&安培;)(basic_socket.hpp:285)
   通过0x42CAD7: boost::asio::detail::reactive_socket_accept_op_base<boost::asio::basic_socket<boost::asio::ip::tcp,提高:: ASIO :: stream_socket_service&LT;提高:: ASIO ::知识产权:: TCP&GT; &gt;中提高:: ASIO ::知识产权:: TCP&GT; :: do_perform(升压:: ASIO ::详细:: reactor_op *)(reactive_socket_accept_op.hpp:66)
   通过0x409DE0:提高:: ASIO ::详细:: reactor_op ::执行()(reactor_op.hpp:40)
   通过0x422C2F:提高:: ASIO ::详细:: epoll_reactor :: descriptor_state :: perform_io(无符号整数)(epoll_reactor.ipp:622)-------------------------------------------------- --------------通过线#6在0x61A36A8尺寸为8的写入过程中可能出现的数据竞赛
锁举行:无
   在0x410E9E:无效的boost ::支持ASIO ::详细:: op_queue_access ::接下来&LT;提高:: ASIO ::详细:: task_io_service_operation, boost::asio::detail::task_io_service_operation>(boost::asio::detail::task_io_service_operation*&,提高:: ASIO ::详细:: task_io_service_operation *)(op_queue.hpp:41)
   通过0x40EBEE: boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>::push(boost::asio::detail::task_io_service_operation*) (op_queue.hpp:107)
   通过0x4228BB:提高:: ASIO ::详细:: epoll_reactor ::运行(BOOL,提高:: ASIO ::详细:: op_queue&LT;提高:: ASIO ::详细:: task_io_service_operation&GT;&安培;)(epoll_reactor.ipp:431 )
   由0x423629: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&,提高:: ASIO ::详细:: task_io_service_thread_info和放大器;,提振::系统::错误_ code常量和放大器;)(task_io_service.ipp:396)
   由0x423302:提高:: ASIO ::详细:: task_io_service ::运行(升压::系统::错误_ code&安培;)(task_io_service.ipp:153)
   通过0x42393A:提高:: ASIO :: io_service对象:: run()的(io_service.ipp:59)
   通过0x42EB34:提高:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&GT; ::运算符()(提高:: ASIO :: io_service对象*​​)常量(mem_fn_template.hpp:49)
   通过0x42EA72:unsigned long类型的boost :: _双:: list1的&LT;提高:: _双::值&LT;提高:: ASIO :: io_service对象*​​&GT; &GT; ::运算符()&LT;无符号长,提振:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&gt;中的boost :: _双:: list0&GT;(升压:: _双::类型&lt;无符号长&gt;中的boost :: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&GT;&放;,提振:: _双:: list0&安培;,长)(bind.hpp:243)
   通过0x42E91E:提高:: _双:: bind_t&LT;无符号长,提振:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&gt;中的boost :: _双:: list1的&LT;提高:: _双::值&LT;提高:: ASIO :: io_service对象*​​&GT; &GT; &GT; ::运算符()()(bind_template.hpp:20)
   通过0x42E65D:升压::详细:: thread_data&LT;提高:: _双:: bind_t&LT;无符号长,提振:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&gt;中的boost :: _双:: list1的&LT;提高:: _双::值&LT;提高:: ASIO :: io_service对象*​​&GT; &GT; &GT; &GT; :: run()的(thread.hpp:117)
   通过0x504381​​8:??? (在/usr/lib/libboost_thread.so.1.53.0)
   通过0x4C2D6FE:mythread_wrapper(hg_intercepts.c:219)地址0x61A36A8是尺寸160 alloc'd的块中的8个字节
   在0x4C28A3A:运营商新的(无符号长)(vg_replace_malloc.c:298)
   通过0x42806A:提高:: ASIO ::详细:: epoll_reactor :: descriptor_state * boost::asio::detail::object_pool_access::create<boost::asio::detail::epoll_reactor::descriptor_state>() (object_pool.hpp:35)
   通过0x4267B8: boost::asio::detail::object_pool<boost::asio::detail::epoll_reactor::descriptor_state>::alloc() (object_pool.hpp:89)
   通过0x4229E3:提高:: ASIO ::详细:: epoll_reactor :: allocate_descriptor_state()(epoll_reactor.ipp:512)
   通过0x4223D4:提高:: ASIO ::详细:: epoll_reactor :: register_descriptor(INT,提高:: ASIO ::详细:: epoll_reactor :: descriptor_state *放大器;)(epoll_reactor.ipp:151)
   由0x424405: boost::asio::detail::reactive_socket_service_base::do_assign(boost::asio::detail::reactive_socket_service_base::base_implementation_type&, INT,INT常量和放大器;,提振::系统::错误_ code&安培;)(reactive_socket_service_base.ipp:182)
   通过0x42DA98: boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::assign(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&,提高:: ASIO ::知识产权:: TCP常量和放大器;,INT常量和放大器;,提振::系统::错误_ code&安培;)(reactive_socket_service.hpp:117)
   通过0x42D75C: boost::asio::stream_socket_service<boost::asio::ip::tcp>::assign(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&,提高:: ASIO ::知识产权:: TCP常量和放大器;,INT常量和放大器;,提振::系统::错误_ code&安培;)(stream_socket_service.hpp:138)
   通过0x42D263:提高:: ASIO :: basic_socket&LT;提高:: ASIO ::知识产权:: TCP,提高:: ASIO :: stream_socket_service&LT;提高:: ASIO ::知识产权:: TCP&GT; &GT; ::分配(提高:: ASIO ::知识产权:: TCP常量和放大器;,INT常量和放大器;,提振::系统::错误_ code&安培;)(basic_socket.hpp:285)
   通过0x42CAD7: boost::asio::detail::reactive_socket_accept_op_base<boost::asio::basic_socket<boost::asio::ip::tcp,提高:: ASIO :: stream_socket_service&LT;提高:: ASIO ::知识产权:: TCP&GT; &gt;中提高:: ASIO ::知识产权:: TCP&GT; :: do_perform(升压:: ASIO ::详细:: reactor_op *)(reactive_socket_accept_op.hpp:66)
   通过0x409DE0:提高:: ASIO ::详细:: reactor_op ::执行()(reactor_op.hpp:40)
   通过0x422C2F:提高:: ASIO ::详细:: epoll_reactor :: descriptor_state :: perform_io(无符号整数)(epoll_reactor.ipp:622)-------------------------------------------------- --------------主题2:锁秩序0x64C720 0x619E550之前侵犯观察到的(不正确)的顺序是:锁在0x619E550收购
   在0x4C2C692:调用pthread_mutex_lock(hg_intercepts.c:495)
   由0x408545:提高:: ASIO ::详细:: posix_mutex ::锁()(posix_mutex.hpp:52)
   通过0x40D9E1: boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>::scoped_lock(boost::asio::detail::posix_mutex&) (scoped_lock.hpp:36)
   通过0x422BD3:提高:: ASIO ::详细:: epoll_reactor :: descriptor_state :: perform_io(无符号整数)(epoll_reactor.ipp:611)
   通过0x422D38: boost::asio::detail::epoll_reactor::descriptor_state::do_complete(boost::asio::detail::task_io_service*,提高:: ASIO ::详细:: task_io_service_operation *,提振::系统::错误_ code常量和放大器;,无符号长)(epoll_reactor.ipp:648)
   通过0x409C69:升压:: ASIO ::详细:: task_io_service_operation ::完整(升压:: ASIO ::详细:: task_io_service和放大器;,提振::系统::错误_ code常量和放大器;,无符号长)(task_io_service_operation.hpp :37)
   通过0x4236AD: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&,提高:: ASIO ::详细:: task_io_service_thread_info和放大器;,提振::系统::错误_ code常量和放大器;)(task_io_service.ipp:412)
   由0x423302:提高:: ASIO ::详细:: task_io_service ::运行(升压::系统::错误_ code&安培;)(task_io_service.ipp:153)
   通过0x42393A:提高:: ASIO :: io_service对象:: run()的(io_service.ipp:59)
   通过0x42EB34:提高:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&GT; ::运算符()(提高:: ASIO :: io_service对象*​​)常量(mem_fn_template.hpp:49)
   通过0x42EA72:unsigned long类型的boost :: _双:: list1的&LT;提高:: _双::值&LT;提高:: ASIO :: io_service对象*​​&GT; &GT; ::运算符()&LT;无符号长,提振:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&gt;中的boost :: _双:: list0&GT;(升压:: _双::类型&lt;无符号长&gt;中的boost :: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&GT;&放;,提振:: _双:: list0&安培;,长)(bind.hpp:243)
   通过0x42E91E:提高:: _双:: bind_t&LT;无符号长,提振:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&gt;中的boost :: _双:: list1的&LT;提高:: _双::值&LT;提高:: ASIO :: io_service对象*​​&GT; &GT; &GT; ::运算符()()(bind_template.hpp:20) 接着在0x64C720锁的后采集
   在0x4C2C692:调用pthread_mutex_lock(hg_intercepts.c:495)
   由0x408845:提高:: ASIO ::详细:: posix_static_mutex ::锁()(posix_static_mutex.hpp:44)
   通过0x40E523: boost::asio::detail::scoped_lock<boost::asio::detail::posix_static_mutex>::scoped_lock(boost::asio::detail::posix_static_mutex&) (scoped_lock.hpp:36)
   通过0x424EE7:提高:: ASIO ::详细:: signal_set_service :: deliver_signal(INT)(signal_set_service.ipp:431)
   通过0x42477C:提高:: ASIO ::详细:: signal_set_service :: pipe_read_op :: do_perform(提高:: ASIO ::详细:: reactor_op *)(signal_set_service.ipp:95)
   通过0x409DE0:提高:: ASIO ::详细:: reactor_op ::执行()(reactor_op.hpp:40)
   通过0x422C2F:提高:: ASIO ::详细:: epoll_reactor :: descriptor_state :: perform_io(无符号整数)(epoll_reactor.ipp:622)
   通过0x422D38: boost::asio::detail::epoll_reactor::descriptor_state::do_complete(boost::asio::detail::task_io_service*,提高:: ASIO ::详细:: task_io_service_operation *,提振::系统::错误_ code常量和放大器;,无符号长)(epoll_reactor.ipp:648)
   通过0x409C69:升压:: ASIO ::详细:: task_io_service_operation ::完整(升压:: ASIO ::详细:: task_io_service和放大器;,提振::系统::错误_ code常量和放大器;,无符号长)(task_io_service_operation.hpp :37)
   通过0x4236AD: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&,提高:: ASIO ::详细:: task_io_service_thread_info和放大器;,提振::系统::错误_ code常量和放大器;)(task_io_service.ipp:412)
   由0x423302:提高:: ASIO ::详细:: task_io_service ::运行(升压::系统::错误_ code&安培;)(task_io_service.ipp:153)
   通过0x42393A:提高:: ASIO :: io_service对象:: run()的(io_service.ipp:59)要求的顺序是由在0x64C720收购锁定成立
   在0x4C2C692:调用pthread_mutex_lock(hg_intercepts.c:495)
   由0x408845:提高:: ASIO ::详细:: posix_static_mutex ::锁()(posix_static_mutex.hpp:44)
   通过0x40E523: boost::asio::detail::scoped_lock<boost::asio::detail::posix_static_mutex>::scoped_lock(boost::asio::detail::posix_static_mutex&) (scoped_lock.hpp:36)
   由0x425060:提高:: ASIO ::详细:: signal_set_service :: add_service(提高:: ASIO ::详细:: signal_set_service *)(signal_set_service.ipp:467)
   通过0x4248BB:提高:: ASIO ::详细:: signal_set_service :: signal_set_service(提高:: ASIO :: io_service对象和放大器;)(signal_set_service.ipp:128)
   通过0x42558B:提高:: ASIO :: signal_set_service :: signal_set_service(升压:: ASIO :: io_service对象和放大器;)(signal_set_service.hpp:53)
   通过0x42B628:提高:: ASIO :: io_service对象::服务* boost::asio::detail::service_registry::create<boost::asio::signal_set_service>(boost::asio::io_service&) (service_registry.hpp:81)
   由0x408742:提高:: ASIO ::详细:: service_registry :: do_use_service(提高:: ASIO :: io_service对象::服务::关键常量和放大器;,提高:: ASIO :: io_service对象::服务*(*)(升压: :ASIO :: io_service对象和放大器;))(service_registry.ipp:123)
   通过0x42A92F:提高:: ASIO :: signal_set_service&安培;提高:: ASIO ::详细:: service_registry :: use_service&LT;提高:: ASIO :: signal_set_service&GT;()(service_registry.hpp:48)
   通过0x42984A:提高:: ASIO :: signal_set_service&安培;提高:: ASIO :: use_service&LT;提高:: ASIO :: signal_set_service&GT;(升压:: ASIO :: io_service对象和放大器;)(io_service.hpp:33)
   由0x428633:提高:: ASIO :: basic_io_object&LT;提高:: ASIO :: signal_set_service,假&gt; :: basic_io_object(提高:: ASIO :: io_service对象和放大器;)(basic_io_object.hpp:90)
   通过0x42753A: boost::asio::basic_signal_set<boost::asio::signal_set_service>::basic_signal_set(boost::asio::io_service&) (basic_signal_set.hpp:106) 接着在0x619E550锁的后采集
   在0x4C2C692:调用pthread_mutex_lock(hg_intercepts.c:495)
   由0x408545:提高:: ASIO ::详细:: posix_mutex ::锁()(posix_mutex.hpp:52)
   通过0x40D9E1: boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>::scoped_lock(boost::asio::detail::posix_mutex&) (scoped_lock.hpp:36)
   通过0x4224E4:提高:: ASIO ::详细:: epoll_reactor :: register_internal_descriptor(INT,INT,提高:: ASIO ::详细:: epoll_reactor :: descriptor_state *放;,提高:: ASIO ::详细:: reactor_op *) (epoll_reactor.ipp:179)
   通过0x4250FC:提高:: ASIO ::详细:: signal_set_service :: add_service(提高:: ASIO ::详细:: signal_set_service *)(signal_set_service.ipp:485)
   通过0x4248BB:提高:: ASIO ::详细:: signal_set_service :: signal_set_service(提高:: ASIO :: io_service对象和放大器;)(signal_set_service.ipp:128)
   通过0x42558B:提高:: ASIO :: signal_set_service :: signal_set_service(升压:: ASIO :: io_service对象和放大器;)(signal_set_service.hpp:53)
   通过0x42B628:提高:: ASIO :: io_service对象::服务* boost::asio::detail::service_registry::create<boost::asio::signal_set_service>(boost::asio::io_service&) (service_registry.hpp:81)
   由0x408742:提高:: ASIO ::详细:: service_registry :: do_use_service(提高:: ASIO :: io_service对象::服务::关键常量和放大器;,提高:: ASIO :: io_service对象::服务*(*)(升压: :ASIO :: io_service对象和放大器;))(service_registry.ipp:123)
   通过0x42A92F:提高:: ASIO :: signal_set_service&安培;提高:: ASIO ::详细:: service_registry :: use_service&LT;提高:: ASIO :: signal_set_service&GT;()(service_registry.hpp:48)
   通过0x42984A:提高:: ASIO :: signal_set_service&安培;提高:: ASIO :: use_service&LT;提高:: ASIO :: signal_set_service&GT;(升压:: ASIO :: io_service对象和放大器;)(io_service.hpp:33)
   由0x428633:提高:: ASIO :: basic_io_object&LT;提高:: ASIO :: signal_set_service,假&gt; :: basic_io_object(提高:: ASIO :: io_service对象和放大器;)(basic_io_object.hpp:90)-------------------------------------------------- --------------主题1:锁定令0x619E550 0x64C720之前侵犯观察到的(不正确)的顺序是:锁在0x64C720收购
   在0x4C2C692:调用pthread_mutex_lock(hg_intercepts.c:495)
   由0x408845:提高:: ASIO ::详细:: posix_static_mutex ::锁()(posix_static_mutex.hpp:44)
   通过0x40E523: boost::asio::detail::scoped_lock<boost::asio::detail::posix_static_mutex>::scoped_lock(boost::asio::detail::posix_static_mutex&) (scoped_lock.hpp:36)
   由0x425166:提高:: ASIO ::详细:: signal_set_service :: remove_service(提高:: ASIO ::详细:: signal_set_service *)(signal_set_service.ipp:492)
   通过0x4248F0:提高:: ASIO ::详细:: signal_set_service :: shutdown_service()(signal_set_service.ipp:138)
   通过0x42564D:提高:: ASIO :: signal_set_service :: shutdown_service()(signal_set_service.hpp:110)
   通过0x41AA69:提高:: ASIO ::详细:: service_registry ::〜service_registry()(service_registry.ipp:37)
   通过0x41AB32:提高:: ASIO :: io_service对象::〜io_service对象()(io_service.ipp:53)
   通过0x41B178:HTTP服务器3 :: ::服务器::〜服务器()(在/根/服务器3 /服务器3)
   通过0x41A66A:主(main.cpp中:37) 接着在0x619E550锁的后采集
   在0x4C2C692:调用pthread_mutex_lock(hg_intercepts.c:495)
   由0x408545:提高:: ASIO ::详细:: posix_mutex ::锁()(posix_mutex.hpp:52)
   通过0x40D9E1: boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>::scoped_lock(boost::asio::detail::posix_mutex&) (scoped_lock.hpp:36)
   通过0x40AC3A:提高:: ASIO ::详细:: epoll_reactor :: deregister_descriptor(INT,提高:: ASIO ::详细:: epoll_reactor :: descriptor_state *放大器;,布尔)(epoll_reactor.ipp:307)
   通过0x4251BC:提高:: ASIO ::详细:: signal_set_service :: remove_service(提高:: ASIO ::详细:: signal_set_service *)(signal_set_service.ipp:499)
   通过0x4248F0:提高:: ASIO ::详细:: signal_set_service :: shutdown_service()(signal_set_service.ipp:138)
   通过0x42564D:提高:: ASIO :: signal_set_service :: shutdown_service()(signal_set_service.hpp:110)
   通过0x41AA69:提高:: ASIO ::详细:: service_registry ::〜service_registry()(service_registry.ipp:37)
   通过0x41AB32:提高:: ASIO :: io_service对象::〜io_service对象()(io_service.ipp:53)
   通过0x41B178:HTTP服务器3 :: ::服务器::〜服务器()(在/根/服务器3 /服务器3)
   通过0x41A66A:主(main.cpp中:37)要求的顺序是由在0x619E550收购锁定成立
   在0x4C2C692:调用pthread_mutex_lock(hg_intercepts.c:495)
   由0x408545:提高:: ASIO ::详细:: posix_mutex ::锁()(posix_mutex.hpp:52)
   通过0x40D9E1: boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>::scoped_lock(boost::asio::detail::posix_mutex&) (scoped_lock.hpp:36)
   通过0x422BD3:提高:: ASIO ::详细:: epoll_reactor :: descriptor_state :: perform_io(无符号整数)(epoll_reactor.ipp:611)
   通过0x422D38: boost::asio::detail::epoll_reactor::descriptor_state::do_complete(boost::asio::detail::task_io_service*,提高:: ASIO ::详细:: task_io_service_operation *,提振::系统::错误_ code常量和放大器;,无符号长)(epoll_reactor.ipp:648)
   通过0x409C69:升压:: ASIO ::详细:: task_io_service_operation ::完整(升压:: ASIO ::详细:: task_io_service和放大器;,提振::系统::错误_ code常量和放大器;,无符号长)(task_io_service_operation.hpp :37)
   通过0x4236AD: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&,提高:: ASIO ::详细:: task_io_service_thread_info和放大器;,提振::系统::错误_ code常量和放大器;)(task_io_service.ipp:412)
   由0x423302:提高:: ASIO ::详细:: task_io_service ::运行(升压::系统::错误_ code&安培;)(task_io_service.ipp:153)
   通过0x42393A:提高:: ASIO :: io_service对象:: run()的(io_service.ipp:59)
   通过0x42EB34:提高:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&GT; ::运算符()(提高:: ASIO :: io_service对象*​​)常量(mem_fn_template.hpp:49)
   通过0x42EA72:unsigned long类型的boost :: _双:: list1的&LT;提高:: _双::值&LT;提高:: ASIO :: io_service对象*​​&GT; &GT; ::运算符()&LT;无符号长,提振:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&gt;中的boost :: _双:: list0&GT;(升压:: _双::类型&lt;无符号长&gt;中的boost :: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&GT;&放;,提振:: _双:: list0&安培;,长)(bind.hpp:243)
   通过0x42E91E:提高:: _双:: bind_t&LT;无符号长,提振:: _ MFI :: MF0&LT;无符号长,提高:: ASIO :: io_service对象&gt;中的boost :: _双:: list1的&LT;提高:: _双::值&LT;提高:: ASIO :: io_service对象*​​&GT; &GT; &GT; ::运算符()()(bind_template.hpp:20) 接着在0x64C720锁的后采集
   在0x4C2C692:调用pthread_mutex_lock(hg_intercepts.c:495)
   由0x408845:提高:: ASIO ::详细:: posix_static_mutex ::锁()(posix_static_mutex.hpp:44)
   通过0x40E523: boost::asio::detail::scoped_lock<boost::asio::detail::posix_static_mutex>::scoped_lock(boost::asio::detail::posix_static_mutex&) (scoped_lock.hpp:36)
   通过0x424EE7:提高:: ASIO ::详细:: signal_set_service :: deliver_signal(INT)(signal_set_service.ipp:431)
   通过0x42477C:提高:: ASIO ::详细:: signal_set_service :: pipe_read_op :: do_perform(提高:: ASIO ::详细:: reactor_op *)(signal_set_service.ipp:95)
   通过0x409DE0:提高:: ASIO ::详细:: reactor_op ::执行()(reactor_op.hpp:40)
   通过0x422C2F:提高:: ASIO ::详细:: epoll_reactor :: descriptor_state :: perform_io(无符号整数)(epoll_reactor.ipp:622)
   通过0x422D38: boost::asio::detail::epoll_reactor::descriptor_state::do_complete(boost::asio::detail::task_io_service*,提高:: ASIO ::详细:: task_io_service_operation *,提振::系统::错误_ code常量和放大器;,无符号长)(epoll_reactor.ipp:648)
   通过0x409C69:升压:: ASIO ::详细:: task_io_service_operation ::完整(升压:: ASIO ::详细:: task_io_service和放大器;,提振::系统::错误_ code常量和放大器;,无符号长)(task_io_service_operation.hpp :37)
   通过0x4236AD: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&,提高:: ASIO ::详细:: task_io_service_thread_info和放大器;,提振::系统::错误_ code常量和放大器;)(task_io_service.ipp:412)
   由0x423302:提高:: ASIO ::详细:: task_io_service ::运行(升压::系统::错误_ code&安培;)(task_io_service.ipp:153)
   通过0x42393A:提高:: ASIO :: io_service对象:: run()的(io_service.ipp:59)


解决方案

的<一个href=\"http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/examples.html#boost_asio.examples.http_server_3\"相对=nofollow> HTTP服务器3例如使用线程池。虽然Valgrind是一个非常有用的程序套件,正确使用它需要一点机智。由于helgrind 文档状态的,最好是开始在项目中使用helgrind早。在helgrind投掷现有的多线程程序很可能在我的经验汇报许多误报。作为一个例子,helgrind不能总是使用POSIX条件变量,当检测数据竞争,这句话是从helgrind文档我联系previously


  

避免POSIX条件变量。如果可以,使用POSIX信号量
  (sem_t,sem_post,sem_wait)做线程间的事件信号。
  为零的初始值信号量是特别有用
  这一点。


这有可能是你引用了误报的原因。无论是长耳和线程库使用条件变量作为其实现的一部分。我很怀疑可能的数据争或不正确的锁定顺序是由于无论是图书馆的错误。这是值得引用<一个href=\"http://www.codinghorror.com/blog/2008/03/the-first-rule-of-programming-its-always-your-fault.html\"相对=nofollow>杰夫·阿特伍德的编程的第一条规则在这里


  

被一个不起眼的程序员一个重要组成部分,是实现了
  只要有你已经写了code的一个问题,它总是
  你的错。该错误在OS存在,它是可能的话,编译器,
  或第三方产品 - 但是这不应该是你首先想到的。
  这是更可能的错误在应用code存在
  正在开发中。


boost library version 1.53
Debian Linux 6.0 ( Linux 2.6.32-5-amd64 on x86_64 )

It is hard to test own software when valgrind log contains lots of warnings.
So with no changes I built the HTTP server3 example and run it under the Valgrind.
Take a look, please. Did I miss something?

valgrind --tool=helgrind --log-file=valgrind.log ./server3 0.0.0.0 83 5 /root/server3
Here is the Helgrind log (edited to 30000 body characters limit, full log http://pastebin.com/Vkbr9vsA):

Helgrind, a thread error detector
Copyright (C) 2007-2012, and GNU GPL'd, by OpenWorks LLP et al.
Using Valgrind-3.9.0.SVN and LibVEX; rerun with -h for copyright info
Command: ./server3 0.0.0.0 83 5 /root/server3
Parent PID: 8662

Lock at 0x524F5E0 was first observed
   at 0x4C2C692: pthread_mutex_lock (hg_intercepts.c:495)
   by 0x5043388: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5043498: boost::detail::set_current_thread_data(boost::detail::thread_data_base*) (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x504380E: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x4C2D6FE: mythread_wrapper (hg_intercepts.c:219)
   by 0x5256B4F: start_thread (pthread_create.c:304)
   by 0x5CE5A7C: clone (clone.S:112)

Possible data race during read of size 8 at 0x524F4E8 by thread #3
Locks held: none
   at 0x5043356: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5043498: boost::detail::set_current_thread_data(boost::detail::thread_data_base*) (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x504380E: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x4C2D6FE: mythread_wrapper (hg_intercepts.c:219)
   by 0x5256B4F: start_thread (pthread_create.c:304)
   by 0x5CE5A7C: clone (clone.S:112)

This conflicts with a previous write of size 8 by thread #2
Locks held: 1, at address 0x524F5E0
   at 0x5043416: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5043498: boost::detail::set_current_thread_data(boost::detail::thread_data_base*) (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x504380E: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x4C2D6FE: mythread_wrapper (hg_intercepts.c:219)
   by 0x5256B4F: start_thread (pthread_create.c:304)
   by 0x5CE5A7C: clone (clone.S:112)

----------------------------------------------------------------

Possible data race during read of size 4 at 0x524F60C by thread #3
Locks held: none
   at 0x50496D4: boost::detail::get_once_per_thread_epoch() (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5043361: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5043498: boost::detail::set_current_thread_data(boost::detail::thread_data_base*) (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x504380E: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x4C2D6FE: mythread_wrapper (hg_intercepts.c:219)
   by 0x5256B4F: start_thread (pthread_create.c:304)
   by 0x5CE5A7C: clone (clone.S:112)

This conflicts with a previous write of size 4 by thread #2
Locks held: none
   at 0x525C27B: pthread_key_create (pthread_key_create.c:44)
   by 0x525C82F: pthread_once (pthread_once.S:104)
   by 0x50496D3: boost::detail::get_once_per_thread_epoch() (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5043361: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5043498: boost::detail::set_current_thread_data(boost::detail::thread_data_base*) (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x504380E: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x4C2D6FE: mythread_wrapper (hg_intercepts.c:219)
   by 0x5256B4F: start_thread (pthread_create.c:304)

----------------------------------------------------------------

Possible data race during read of size 8 at 0x524F4E8 by thread #1
Locks held: 1, at address 0x61A1E20
   at 0x5043356: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5043478: boost::detail::get_current_thread_data() (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5047875: boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*) (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5044002: boost::thread::join_noexcept() (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x42660E: boost::thread::join() (thread.hpp:751)
   by 0x4215C5: http::server3::server::run() (server.cpp:63)
   by 0x41A65B: main (main.cpp:37)

----------------------------------------------------------------

Possible data race during read of size 4 at 0x524F60C by thread #1
Locks held: 1, at address 0x61A1E20
   at 0x50496D4: boost::detail::get_once_per_thread_epoch() (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5043361: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5043478: boost::detail::get_current_thread_data() (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5047875: boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*) (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5044002: boost::thread::join_noexcept() (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x42660E: boost::thread::join() (thread.hpp:751)
   by 0x4215C5: http::server3::server::run() (server.cpp:63)
   by 0x41A65B: main (main.cpp:37)

This conflicts with a previous write of size 4 by thread #2
Locks held: none
   at 0x525C27B: pthread_key_create (pthread_key_create.c:44)
   by 0x525C82F: pthread_once (pthread_once.S:104)
   by 0x50496D3: boost::detail::get_once_per_thread_epoch() (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5043361: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x5043498: boost::detail::set_current_thread_data(boost::detail::thread_data_base*) (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x504380E: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x4C2D6FE: mythread_wrapper (hg_intercepts.c:219)
   by 0x5256B4F: start_thread (pthread_create.c:304)

----------------------------------------------------------------

Possible data race during write of size 4 at 0x61A36B8 by thread #6
Locks held: none
   at 0x4223B0: boost::asio::detail::epoll_reactor::descriptor_state::set_ready_events(unsigned int) (epoll_reactor.hpp:68)
   by 0x4228A5: boost::asio::detail::epoll_reactor::run(bool, boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>&) (epoll_reactor.ipp:430)
   by 0x423629: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service_thread_info&, boost::system::error_code const&) (task_io_service.ipp:396)
   by 0x423302: boost::asio::detail::task_io_service::run(boost::system::error_code&) (task_io_service.ipp:153)
   by 0x42393A: boost::asio::io_service::run() (io_service.ipp:59)
   by 0x42EB34: boost::_mfi::mf0<unsigned long, boost::asio::io_service>::operator()(boost::asio::io_service*) const (mem_fn_template.hpp:49)
   by 0x42EA72: unsigned long boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> >::operator()<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list0>(boost::_bi::type<unsigned long>, boost::_mfi::mf0<unsigned long, boost::asio::io_service>&, boost::_bi::list0&, long) (bind.hpp:243)
   by 0x42E91E: boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > >::operator()() (bind_template.hpp:20)
   by 0x42E65D: boost::detail::thread_data<boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > > >::run() (thread.hpp:117)
   by 0x5043818: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x4C2D6FE: mythread_wrapper (hg_intercepts.c:219)
   by 0x5256B4F: start_thread (pthread_create.c:304)

Address 0x61A36B8 is 24 bytes inside a block of size 160 alloc'd
   at 0x4C28A3A: operator new(unsigned long) (vg_replace_malloc.c:298)
   by 0x42806A: boost::asio::detail::epoll_reactor::descriptor_state* boost::asio::detail::object_pool_access::create<boost::asio::detail::epoll_reactor::descriptor_state>() (object_pool.hpp:35)
   by 0x4267B8: boost::asio::detail::object_pool<boost::asio::detail::epoll_reactor::descriptor_state>::alloc() (object_pool.hpp:89)
   by 0x4229E3: boost::asio::detail::epoll_reactor::allocate_descriptor_state() (epoll_reactor.ipp:512)
   by 0x4223D4: boost::asio::detail::epoll_reactor::register_descriptor(int, boost::asio::detail::epoll_reactor::descriptor_state*&) (epoll_reactor.ipp:151)
   by 0x424405: boost::asio::detail::reactive_socket_service_base::do_assign(boost::asio::detail::reactive_socket_service_base::base_implementation_type&, int, int const&, boost::system::error_code&) (reactive_socket_service_base.ipp:182)
   by 0x42DA98: boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::assign(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&, boost::asio::ip::tcp const&, int const&, boost::system::error_code&) (reactive_socket_service.hpp:117)
   by 0x42D75C: boost::asio::stream_socket_service<boost::asio::ip::tcp>::assign(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&, boost::asio::ip::tcp const&, int const&, boost::system::error_code&) (stream_socket_service.hpp:138)
   by 0x42D263: boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::assign(boost::asio::ip::tcp const&, int const&, boost::system::error_code&) (basic_socket.hpp:285)
   by 0x42CAD7: boost::asio::detail::reactive_socket_accept_op_base<boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, boost::asio::ip::tcp>::do_perform(boost::asio::detail::reactor_op*) (reactive_socket_accept_op.hpp:66)
   by 0x409DE0: boost::asio::detail::reactor_op::perform() (reactor_op.hpp:40)
   by 0x422C2F: boost::asio::detail::epoll_reactor::descriptor_state::perform_io(unsigned int) (epoll_reactor.ipp:622)

----------------------------------------------------------------

Possible data race during write of size 8 at 0x61A36A8 by thread #6
Locks held: none
   at 0x410E9E: void boost::asio::detail::op_queue_access::next<boost::asio::detail::task_io_service_operation, boost::asio::detail::task_io_service_operation>(boost::asio::detail::task_io_service_operation*&, boost::asio::detail::task_io_service_operation*) (op_queue.hpp:41)
   by 0x40EBEE: boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>::push(boost::asio::detail::task_io_service_operation*) (op_queue.hpp:107)
   by 0x4228BB: boost::asio::detail::epoll_reactor::run(bool, boost::asio::detail::op_queue<boost::asio::detail::task_io_service_operation>&) (epoll_reactor.ipp:431)
   by 0x423629: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service_thread_info&, boost::system::error_code const&) (task_io_service.ipp:396)
   by 0x423302: boost::asio::detail::task_io_service::run(boost::system::error_code&) (task_io_service.ipp:153)
   by 0x42393A: boost::asio::io_service::run() (io_service.ipp:59)
   by 0x42EB34: boost::_mfi::mf0<unsigned long, boost::asio::io_service>::operator()(boost::asio::io_service*) const (mem_fn_template.hpp:49)
   by 0x42EA72: unsigned long boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> >::operator()<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list0>(boost::_bi::type<unsigned long>, boost::_mfi::mf0<unsigned long, boost::asio::io_service>&, boost::_bi::list0&, long) (bind.hpp:243)
   by 0x42E91E: boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > >::operator()() (bind_template.hpp:20)
   by 0x42E65D: boost::detail::thread_data<boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > > >::run() (thread.hpp:117)
   by 0x5043818: ??? (in /usr/lib/libboost_thread.so.1.53.0)
   by 0x4C2D6FE: mythread_wrapper (hg_intercepts.c:219)

Address 0x61A36A8 is 8 bytes inside a block of size 160 alloc'd
   at 0x4C28A3A: operator new(unsigned long) (vg_replace_malloc.c:298)
   by 0x42806A: boost::asio::detail::epoll_reactor::descriptor_state* boost::asio::detail::object_pool_access::create<boost::asio::detail::epoll_reactor::descriptor_state>() (object_pool.hpp:35)
   by 0x4267B8: boost::asio::detail::object_pool<boost::asio::detail::epoll_reactor::descriptor_state>::alloc() (object_pool.hpp:89)
   by 0x4229E3: boost::asio::detail::epoll_reactor::allocate_descriptor_state() (epoll_reactor.ipp:512)
   by 0x4223D4: boost::asio::detail::epoll_reactor::register_descriptor(int, boost::asio::detail::epoll_reactor::descriptor_state*&) (epoll_reactor.ipp:151)
   by 0x424405: boost::asio::detail::reactive_socket_service_base::do_assign(boost::asio::detail::reactive_socket_service_base::base_implementation_type&, int, int const&, boost::system::error_code&) (reactive_socket_service_base.ipp:182)
   by 0x42DA98: boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::assign(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&, boost::asio::ip::tcp const&, int const&, boost::system::error_code&) (reactive_socket_service.hpp:117)
   by 0x42D75C: boost::asio::stream_socket_service<boost::asio::ip::tcp>::assign(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&, boost::asio::ip::tcp const&, int const&, boost::system::error_code&) (stream_socket_service.hpp:138)
   by 0x42D263: boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::assign(boost::asio::ip::tcp const&, int const&, boost::system::error_code&) (basic_socket.hpp:285)
   by 0x42CAD7: boost::asio::detail::reactive_socket_accept_op_base<boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, boost::asio::ip::tcp>::do_perform(boost::asio::detail::reactor_op*) (reactive_socket_accept_op.hpp:66)
   by 0x409DE0: boost::asio::detail::reactor_op::perform() (reactor_op.hpp:40)
   by 0x422C2F: boost::asio::detail::epoll_reactor::descriptor_state::perform_io(unsigned int) (epoll_reactor.ipp:622)

----------------------------------------------------------------

Thread #2: lock order "0x64C720 before 0x619E550" violated

Observed (incorrect) order is: acquisition of lock at 0x619E550
   at 0x4C2C692: pthread_mutex_lock (hg_intercepts.c:495)
   by 0x408545: boost::asio::detail::posix_mutex::lock() (posix_mutex.hpp:52)
   by 0x40D9E1: boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>::scoped_lock(boost::asio::detail::posix_mutex&) (scoped_lock.hpp:36)
   by 0x422BD3: boost::asio::detail::epoll_reactor::descriptor_state::perform_io(unsigned int) (epoll_reactor.ipp:611)
   by 0x422D38: boost::asio::detail::epoll_reactor::descriptor_state::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code const&, unsigned long) (epoll_reactor.ipp:648)
   by 0x409C69: boost::asio::detail::task_io_service_operation::complete(boost::asio::detail::task_io_service&, boost::system::error_code const&, unsigned long) (task_io_service_operation.hpp:37)
   by 0x4236AD: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service_thread_info&, boost::system::error_code const&) (task_io_service.ipp:412)
   by 0x423302: boost::asio::detail::task_io_service::run(boost::system::error_code&) (task_io_service.ipp:153)
   by 0x42393A: boost::asio::io_service::run() (io_service.ipp:59)
   by 0x42EB34: boost::_mfi::mf0<unsigned long, boost::asio::io_service>::operator()(boost::asio::io_service*) const (mem_fn_template.hpp:49)
   by 0x42EA72: unsigned long boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> >::operator()<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list0>(boost::_bi::type<unsigned long>, boost::_mfi::mf0<unsigned long, boost::asio::io_service>&, boost::_bi::list0&, long) (bind.hpp:243)
   by 0x42E91E: boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > >::operator()() (bind_template.hpp:20)

 followed by a later acquisition of lock at 0x64C720
   at 0x4C2C692: pthread_mutex_lock (hg_intercepts.c:495)
   by 0x408845: boost::asio::detail::posix_static_mutex::lock() (posix_static_mutex.hpp:44)
   by 0x40E523: boost::asio::detail::scoped_lock<boost::asio::detail::posix_static_mutex>::scoped_lock(boost::asio::detail::posix_static_mutex&) (scoped_lock.hpp:36)
   by 0x424EE7: boost::asio::detail::signal_set_service::deliver_signal(int) (signal_set_service.ipp:431)
   by 0x42477C: boost::asio::detail::signal_set_service::pipe_read_op::do_perform(boost::asio::detail::reactor_op*) (signal_set_service.ipp:95)
   by 0x409DE0: boost::asio::detail::reactor_op::perform() (reactor_op.hpp:40)
   by 0x422C2F: boost::asio::detail::epoll_reactor::descriptor_state::perform_io(unsigned int) (epoll_reactor.ipp:622)
   by 0x422D38: boost::asio::detail::epoll_reactor::descriptor_state::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code const&, unsigned long) (epoll_reactor.ipp:648)
   by 0x409C69: boost::asio::detail::task_io_service_operation::complete(boost::asio::detail::task_io_service&, boost::system::error_code const&, unsigned long) (task_io_service_operation.hpp:37)
   by 0x4236AD: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service_thread_info&, boost::system::error_code const&) (task_io_service.ipp:412)
   by 0x423302: boost::asio::detail::task_io_service::run(boost::system::error_code&) (task_io_service.ipp:153)
   by 0x42393A: boost::asio::io_service::run() (io_service.ipp:59)

Required order was established by acquisition of lock at 0x64C720
   at 0x4C2C692: pthread_mutex_lock (hg_intercepts.c:495)
   by 0x408845: boost::asio::detail::posix_static_mutex::lock() (posix_static_mutex.hpp:44)
   by 0x40E523: boost::asio::detail::scoped_lock<boost::asio::detail::posix_static_mutex>::scoped_lock(boost::asio::detail::posix_static_mutex&) (scoped_lock.hpp:36)
   by 0x425060: boost::asio::detail::signal_set_service::add_service(boost::asio::detail::signal_set_service*) (signal_set_service.ipp:467)
   by 0x4248BB: boost::asio::detail::signal_set_service::signal_set_service(boost::asio::io_service&) (signal_set_service.ipp:128)
   by 0x42558B: boost::asio::signal_set_service::signal_set_service(boost::asio::io_service&) (signal_set_service.hpp:53)
   by 0x42B628: boost::asio::io_service::service* boost::asio::detail::service_registry::create<boost::asio::signal_set_service>(boost::asio::io_service&) (service_registry.hpp:81)
   by 0x408742: boost::asio::detail::service_registry::do_use_service(boost::asio::io_service::service::key const&, boost::asio::io_service::service* (*)(boost::asio::io_service&)) (service_registry.ipp:123)
   by 0x42A92F: boost::asio::signal_set_service& boost::asio::detail::service_registry::use_service<boost::asio::signal_set_service>() (service_registry.hpp:48)
   by 0x42984A: boost::asio::signal_set_service& boost::asio::use_service<boost::asio::signal_set_service>(boost::asio::io_service&) (io_service.hpp:33)
   by 0x428633: boost::asio::basic_io_object<boost::asio::signal_set_service, false>::basic_io_object(boost::asio::io_service&) (basic_io_object.hpp:90)
   by 0x42753A: boost::asio::basic_signal_set<boost::asio::signal_set_service>::basic_signal_set(boost::asio::io_service&) (basic_signal_set.hpp:106)

 followed by a later acquisition of lock at 0x619E550
   at 0x4C2C692: pthread_mutex_lock (hg_intercepts.c:495)
   by 0x408545: boost::asio::detail::posix_mutex::lock() (posix_mutex.hpp:52)
   by 0x40D9E1: boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>::scoped_lock(boost::asio::detail::posix_mutex&) (scoped_lock.hpp:36)
   by 0x4224E4: boost::asio::detail::epoll_reactor::register_internal_descriptor(int, int, boost::asio::detail::epoll_reactor::descriptor_state*&, boost::asio::detail::reactor_op*) (epoll_reactor.ipp:179)
   by 0x4250FC: boost::asio::detail::signal_set_service::add_service(boost::asio::detail::signal_set_service*) (signal_set_service.ipp:485)
   by 0x4248BB: boost::asio::detail::signal_set_service::signal_set_service(boost::asio::io_service&) (signal_set_service.ipp:128)
   by 0x42558B: boost::asio::signal_set_service::signal_set_service(boost::asio::io_service&) (signal_set_service.hpp:53)
   by 0x42B628: boost::asio::io_service::service* boost::asio::detail::service_registry::create<boost::asio::signal_set_service>(boost::asio::io_service&) (service_registry.hpp:81)
   by 0x408742: boost::asio::detail::service_registry::do_use_service(boost::asio::io_service::service::key const&, boost::asio::io_service::service* (*)(boost::asio::io_service&)) (service_registry.ipp:123)
   by 0x42A92F: boost::asio::signal_set_service& boost::asio::detail::service_registry::use_service<boost::asio::signal_set_service>() (service_registry.hpp:48)
   by 0x42984A: boost::asio::signal_set_service& boost::asio::use_service<boost::asio::signal_set_service>(boost::asio::io_service&) (io_service.hpp:33)
   by 0x428633: boost::asio::basic_io_object<boost::asio::signal_set_service, false>::basic_io_object(boost::asio::io_service&) (basic_io_object.hpp:90)

----------------------------------------------------------------

Thread #1: lock order "0x619E550 before 0x64C720" violated

Observed (incorrect) order is: acquisition of lock at 0x64C720
   at 0x4C2C692: pthread_mutex_lock (hg_intercepts.c:495)
   by 0x408845: boost::asio::detail::posix_static_mutex::lock() (posix_static_mutex.hpp:44)
   by 0x40E523: boost::asio::detail::scoped_lock<boost::asio::detail::posix_static_mutex>::scoped_lock(boost::asio::detail::posix_static_mutex&) (scoped_lock.hpp:36)
   by 0x425166: boost::asio::detail::signal_set_service::remove_service(boost::asio::detail::signal_set_service*) (signal_set_service.ipp:492)
   by 0x4248F0: boost::asio::detail::signal_set_service::shutdown_service() (signal_set_service.ipp:138)
   by 0x42564D: boost::asio::signal_set_service::shutdown_service() (signal_set_service.hpp:110)
   by 0x41AA69: boost::asio::detail::service_registry::~service_registry() (service_registry.ipp:37)
   by 0x41AB32: boost::asio::io_service::~io_service() (io_service.ipp:53)
   by 0x41B178: http::server3::server::~server() (in /root/server3/server3)
   by 0x41A66A: main (main.cpp:37)

 followed by a later acquisition of lock at 0x619E550
   at 0x4C2C692: pthread_mutex_lock (hg_intercepts.c:495)
   by 0x408545: boost::asio::detail::posix_mutex::lock() (posix_mutex.hpp:52)
   by 0x40D9E1: boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>::scoped_lock(boost::asio::detail::posix_mutex&) (scoped_lock.hpp:36)
   by 0x40AC3A: boost::asio::detail::epoll_reactor::deregister_descriptor(int, boost::asio::detail::epoll_reactor::descriptor_state*&, bool) (epoll_reactor.ipp:307)
   by 0x4251BC: boost::asio::detail::signal_set_service::remove_service(boost::asio::detail::signal_set_service*) (signal_set_service.ipp:499)
   by 0x4248F0: boost::asio::detail::signal_set_service::shutdown_service() (signal_set_service.ipp:138)
   by 0x42564D: boost::asio::signal_set_service::shutdown_service() (signal_set_service.hpp:110)
   by 0x41AA69: boost::asio::detail::service_registry::~service_registry() (service_registry.ipp:37)
   by 0x41AB32: boost::asio::io_service::~io_service() (io_service.ipp:53)
   by 0x41B178: http::server3::server::~server() (in /root/server3/server3)
   by 0x41A66A: main (main.cpp:37)

Required order was established by acquisition of lock at 0x619E550
   at 0x4C2C692: pthread_mutex_lock (hg_intercepts.c:495)
   by 0x408545: boost::asio::detail::posix_mutex::lock() (posix_mutex.hpp:52)
   by 0x40D9E1: boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>::scoped_lock(boost::asio::detail::posix_mutex&) (scoped_lock.hpp:36)
   by 0x422BD3: boost::asio::detail::epoll_reactor::descriptor_state::perform_io(unsigned int) (epoll_reactor.ipp:611)
   by 0x422D38: boost::asio::detail::epoll_reactor::descriptor_state::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code const&, unsigned long) (epoll_reactor.ipp:648)
   by 0x409C69: boost::asio::detail::task_io_service_operation::complete(boost::asio::detail::task_io_service&, boost::system::error_code const&, unsigned long) (task_io_service_operation.hpp:37)
   by 0x4236AD: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service_thread_info&, boost::system::error_code const&) (task_io_service.ipp:412)
   by 0x423302: boost::asio::detail::task_io_service::run(boost::system::error_code&) (task_io_service.ipp:153)
   by 0x42393A: boost::asio::io_service::run() (io_service.ipp:59)
   by 0x42EB34: boost::_mfi::mf0<unsigned long, boost::asio::io_service>::operator()(boost::asio::io_service*) const (mem_fn_template.hpp:49)
   by 0x42EA72: unsigned long boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> >::operator()<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list0>(boost::_bi::type<unsigned long>, boost::_mfi::mf0<unsigned long, boost::asio::io_service>&, boost::_bi::list0&, long) (bind.hpp:243)
   by 0x42E91E: boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > >::operator()() (bind_template.hpp:20)

 followed by a later acquisition of lock at 0x64C720
   at 0x4C2C692: pthread_mutex_lock (hg_intercepts.c:495)
   by 0x408845: boost::asio::detail::posix_static_mutex::lock() (posix_static_mutex.hpp:44)
   by 0x40E523: boost::asio::detail::scoped_lock<boost::asio::detail::posix_static_mutex>::scoped_lock(boost::asio::detail::posix_static_mutex&) (scoped_lock.hpp:36)
   by 0x424EE7: boost::asio::detail::signal_set_service::deliver_signal(int) (signal_set_service.ipp:431)
   by 0x42477C: boost::asio::detail::signal_set_service::pipe_read_op::do_perform(boost::asio::detail::reactor_op*) (signal_set_service.ipp:95)
   by 0x409DE0: boost::asio::detail::reactor_op::perform() (reactor_op.hpp:40)
   by 0x422C2F: boost::asio::detail::epoll_reactor::descriptor_state::perform_io(unsigned int) (epoll_reactor.ipp:622)
   by 0x422D38: boost::asio::detail::epoll_reactor::descriptor_state::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code const&, unsigned long) (epoll_reactor.ipp:648)
   by 0x409C69: boost::asio::detail::task_io_service_operation::complete(boost::asio::detail::task_io_service&, boost::system::error_code const&, unsigned long) (task_io_service_operation.hpp:37)
   by 0x4236AD: boost::asio::detail::task_io_service::do_run_one(boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex>&, boost::asio::detail::task_io_service_thread_info&, boost::system::error_code const&) (task_io_service.ipp:412)
   by 0x423302: boost::asio::detail::task_io_service::run(boost::system::error_code&) (task_io_service.ipp:153)
   by 0x42393A: boost::asio::io_service::run() (io_service.ipp:59)

解决方案

The HTTP Server 3 example uses a pool of threads. And while Valgrind is an immensely useful suite of programs, using it correctly requires a bit of tact. As the helgrind documentation states, it is best to start using helgrind early in a project. Throwing an existing multi-threaded program at helgrind is very likely to report many false positives in my experience. As an example, helgrind cannot always detect data races when using posix condition variables, this quote is from the helgrind documentation I linked previously

Avoid POSIX condition variables. If you can, use POSIX semaphores (sem_t, sem_post, sem_wait) to do inter-thread event signalling. Semaphores with an initial value of zero are particularly useful for this.

It is possible this is the cause of the false positives you have cited. Both the Asio and Thread libraries use condition variables as part of their implementation. I very much doubt the possible data races or incorrect lock ordering is due to a bug in either library. It's worth quoting Jeff Atwood's First Rule of Programming here

An essential part of being a humble programmer is realizing that whenever there's a problem with the code you've written, it's always your fault. It is possible that a bug exists in the OS, the compiler, or a third-party product -- but this should not be your first thought. It is much more likely that the bug exists in the application code under development.

这篇关于有没有在升压ASIO HTTP服务器3例子或升压错误的错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆