boost.asio与boost.log同时使用导致socket不能正常收发数据
现象:
1。 没有使用boost.log前能正常收发数据
2。加入boost.log后async_connect没有回调
fix过程:
1. gdb调试发现程序block在pthread_timed_wait.死锁? 使用helgrind没有检查出异常.
2. 难道是内存错误? valgrind的memcheck也没有发现异常
3. 重新编译boost为debug版, gdb调试发现 task_io_service的op_queue_works_的内存地址在使用boost.log前后居然从63070变成了63078。查看task_io_service.hpp发现一个outstanding_works_ 的原子变量。 在使用boost.log 前后ptype outstanding_works_发现没有使用boost.log是为std::atomic,而使用boost.log 后居然变成了boost::atomic.
解决办法:
1. 在编译程序时使用-DBOOST_ASIO_DISABLE_STD_ATOMIC
2. 重新编译boost. ./b2 -a cxxflags='-std=c++11' variant=debug install