Boost logo

Boost Users :

From: Labour, Matthieu (MLPRO SF) (matthieu_labour_at_[hidden])
Date: 2005-08-08 10:49:38


Caleb

Thank you for taking the time to answer my email. I actually did use a
mutex to protect my queue.

I did another test very simple to reproduce the problem.

A program creates N threads that construct & destroy objects in an
object pool

With N = 9, it crashes on linux

Following is the source code of the program & the gdb trace.

Thank you for your help

#include <iostream>

#include <boost/thread/thread.hpp>
#include <boost/pool/poolfwd.hpp>
#include <boost/pool/object_pool.hpp>

class Foo;

static boost::object_pool<Foo>* _pool;

class Foo{
public:
        void handle(){
        _pool->destroy(this);
        }
};

class Bar{
public:
        Bar(){}
        void operator()(){
                for(;;){
                        Foo* foo = _pool->construct();
                        foo->handle();
                }
        }
};

int main(int argc, char* argv[])
{

        if(argc != 2){
                std::cout << "Usage: nbThrd" << std::endl;
                return 0;
        }
        
        int nbThrd = atoi(argv[1]);

        _pool = new boost::object_pool<Foo>(1000);

        boost::thread_group _threads;
        Bar bar;

        for (int i=0; i<nbThrd; ++i){
                _threads.create_thread(bar);
        }
        
        _threads.join_all();
        
        return 0;
}

Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/tls/libpthread.so.0...done.
Loaded symbols for /lib/tls/libpthread.so.0
Reading symbols from /lib/tls/librt.so.1...done.
Loaded symbols for /lib/tls/librt.so.1
Reading symbols from /usr/lib/libstdc++.so.5...done.
Loaded symbols for /usr/lib/libstdc++.so.5
Reading symbols from /lib/tls/libm.so.6...done.
Loaded symbols for /lib/tls/libm.so.6
Reading symbols from /lib/libgcc_s.so.1...done.
Loaded symbols for /lib/libgcc_s.so.1
Reading symbols from /lib/tls/libc.so.6...done.
Loaded symbols for /lib/tls/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
#0
boost::pool<boost::default_user_allocator_new_delete>::ordered_malloc_ne
ed_resize (this=0x8fc94c0)
    at simple_segregated_storage.hpp:46
46 { return *(static_cast<void **>(ptr)); }
(gdb) where
#0
boost::pool<boost::default_user_allocator_new_delete>::ordered_malloc_ne
ed_resize (this=0x8fc94c0)
    at simple_segregated_storage.hpp:46
#1 0x08049559 in boost::object_pool<Foo,
boost::default_user_allocator_new_delete>::construct (this=0x8fca760)
    at object_pool.hpp:76
#2 0x08049492 in
boost::detail::function::void_function_obj_invoker0<Bar, void>::invoke
(function_obj_ptr=
      {obj_ptr = 0x8fc9628, const_obj_ptr = 0x8fc9628, func_ptr =
0x8fc9628, data = "("}) at custom.cpp:26
#3 0x00138ef5 in boost::function0<void,
std::allocator<boost::function_base> >::operator() (this=0x40417a70)
    at function_template.hpp:581
#4 0x00138145 in thread_proxy (param=0xbfffc950) at
/home/tjamet/dev/boost_1_32_0/libs/thread/src/thread.cpp:113
#5 0x00454dec in start_thread () from /lib/tls/libpthread.so.0
#6 0x00224a2a in clone () from /lib/tls/libc.so.6

-----Original Message-----
From: boost-users-bounces_at_[hidden]
[mailto:boost-users-bounces_at_[hidden]] On Behalf Of Caleb Epstein
Sent: Saturday, August 06, 2005 11:31 AM
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] Maybe a problem with boost::object_pool?

On 8/5/05, Labour, Matthieu (MLPRO SF) <matthieu_labour_at_[hidden]> wrote:

> There are 2 threads.
> One thread creates Objects using boost::object_pool and enqueues them
into a
> stl queue.

Are you using a mutex to protect the push/pop operations on the queue?
 If not, then this is your problem.

-- 
Caleb Epstein
caleb dot epstein at gmail dot com
_______________________________________________
Boost-users mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users
--------------------------------------------------------
If you are not an intended recipient of this e-mail, please notify the sender, delete it and do not read, act upon, print, disclose, copy, retain or redistribute it. Click here for important additional terms relating to this e-mail.     http://www.ml.com/email_terms/
--------------------------------------------------------

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