Boost logo

Boost :

Subject: [boost] boost::tasks::static_pool< boost::tasks::unbounded_fifo > crashes when poolsize > 1
From: Joseph Winston (josephwinston_at_[hidden])
Date: 2010-12-13 12:17:29


I've attached a program that reproduces the problem for me.

The system this is running on is the following (Yes, I know it is old
but I have very little control over the OS and compiler):

Distribution: RHEL 4
$ uname -a
Linux jwhp8400.houston.lgc.com 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:56:44
EST 2007 x86_64 x86_64 x86_64 GNU/Linux

Compiler: g++ 3.4.6
boost: 1.39.0
boost.context: 0.2.0
boost.fiber: 0.5.1
boost.task: svn revision 67209

The code of interest is:

void f1()
{
    std::cout << "\t"
              << "f1" << std::endl;
}

void f2()
{
    std::cout << "\t"
              << "f2" << std::endl;
}

void
demo()
{
    typedef boost::tasks::static_pool< boost::tasks::unbounded_fifo >
pool_type;
    pool_type pool(boost::tasks::poolsize(4),
                   boost::tasks::stacksize(1024 * 128));

    std::cout << "Starting" << std::endl;
    boost::tasks::async(boost::tasks::make_task(f1),
                        pool);
    boost::tasks::async(boost::tasks::make_task(f2),
                        pool);

    pool.shutdown();

    std::cout << "Done" << std::endl;
}

Whenever poolsize is greater than 1, I sometimes receive the following
sigsegv:

(gdb) where
#0 0x0000002a95d7d8db in boost::fibers::detail::trampoline
(vp=0xffffffff96400ac0) at libs/fiber/src/detail/info_base.cpp:25
#1 0x0000003c0203e960 in __correctly_grouped_prefixwc () from
/lib64/tls/libc.so.6
#2 0x0000000000000000 in ?? ()
(gdb) print *self
Cannot access memory at address 0xffffffff96400ac0

Am I missing a fundamental concept with the way that
boost::tasks::static_pool works or is there something else going on?

Thanks




Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk