Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost::Asio on ARMV5TE
From: Peter Meyer (residue_at_[hidden])
Date: 2011-02-20 12:26:04


Hi, after some debugging and testing i track down the problem to epoll. I don't known if it is a wrong usage by boost::asio or a bug inside the kernel. I've changed epoll_reactor.ipp with some debugging output and a memset. 226 void epoll_reactor::run(bool block, op_queue& ops) ... 239 epoll_event events[128]; 240+ ::memset(events, 0XEE, sizeof(events)); 241 int num_events = epoll_wait(epoll_fd_, events, 128, timeout); In case there are more events then one reported by epoll_wait, only the first epoll_event structure is filled with information. All following structures includes garbage or 0xEE set by memset befor calling epoll_wait. Debug output: Count events: 2 ---------------------------------------- EPOLL[0].data.ptr = 0x1ce8b0 EPOLL[1].data.ptr = 0xeeeeeeee So a workaround is to set maxevents to one. Like this: 226 void epoll_reactor::run(bool block, op_queue& ops) ... 240 int num_events = epoll_wait(epoll_fd_, events, 1, timeout); Is there a known bug about epoll on ARM? Or had boost::asio a bug? With best regards Peter > -----Original Message----- > From: Peter Meyer [mailto:r..._at_[hidden]] > Sent: Friday, February 11, 2011 7:57 AM > To: boost-users_at_[hidden] > Subject: [Boost-users] Boost::Asio on ARMV5TE > > > Hi, > > i've wrote a litte proxy using boost::asio (boost 1.45). Program runs > well on Intel (Linux kernel 2.6.35.10 and gcc 4.5.1). > Same code cross compiled for ARMV5TE (Linux 2.6.24.4 and GCC 4.1.2 or > GCC 3.4.3) crashes always at the same point. > Stacktrace looks like this > > Program terminated with signal 11, Segmentation fault. > #0 0x400e3e20 in ?? () > (gdb) backtrace > #0 0x400e3e20 in ?? () > #1 0x0001cfb0 in boost::asio::detail::posix_mutex::lock (this=0x7d) at > /usr/armv5tel-redhat-linux-gnueabi/sys-root/usr/local/include/boost/asio > /detail/posix_mutex.hpp:52 > #2 0x0001cfe6 in scoped_lock (this=0xbe8a98d0, m=@0x7d) at > /usr/armv5tel-redhat-linux-gnueabi/sys-root/usr/local/include/boost/asio > /detail/scoped_lock.hpp:36 > #3 0x00069bf4 in boost::asio::detail::epoll_reactor::run > (this=0x191538, block=true, ops=@0xbe8a994c) > at > /usr/armv5tel-redhat-linux-gnueabi/sys-root/usr/local/include/boost/asio > /detail/impl/epoll_reactor.ipp:275 > #4 0x0006a06c in boost::asio::detail::task_io_service::do_one > (this=0x1914e0, lock=@0xbe8a99d4, this_idle_thread=0xbe8a9990) > at > /usr/armv5tel-redhat-linux-gnueabi/sys-root/usr/local/include/boost/asio > /detail/impl/task_io_service.ipp:264 > #5 0x0006a33c in boost::asio::detail::task_io_service::run > (this=0x1914e0, ec=@0xbe8a9a0c) > at > /usr/armv5tel-redhat-linux-gnueabi/sys-root/usr/local/include/boost/asio > /detail/impl/task_io_service.ipp:130 > #6 0x0006a426 in boost::asio::io_service::run (this=0xbe8a9bc4) at > /usr/armv5tel-redhat-linux-gnueabi/sys-root/usr/local/include/boost/asio > /impl/io_service.ipp:57 > #7 0x00073504 in proxy::Server::run (this=0xbe8a9bb4) at server.cpp:71 > #8 0x0004e2a4 in main (argc=3, argv=0xbe8a9da4) at proxy.cpp:111 > > It looks like the internal epoll_events data structure > (descriptior_state) is corrupted. > > Any advice is welcome. > > With best regards > Peter > ------------------------------------------------------------------------------------


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net