Re: [Boost-bugs] [Boost C++ Libraries] #4648: boost::lock_error Thrown While Using Upgrade Locks

Subject: Re: [Boost-bugs] [Boost C++ Libraries] #4648: boost::lock_error Thrown While Using Upgrade Locks
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2013-06-09 08:45:08


#4648: boost::lock_error Thrown While Using Upgrade Locks
-------------------------+-------------------------------------------------
  Reporter: | Owner: anthonyw
  bornlibra23 | Status: closed
      Type: Support | Component: thread
  Requests | Severity: Problem
 Milestone: | Keywords: Boost.Thread boost::lock_error
   Version: Boost | Synchronization
  1.43.0 |
Resolution: invalid |
-------------------------+-------------------------------------------------
Description changed by viboes:

Old description:

> Hello
> I am trying to model a usecase where a member function reads in a value &
> now has to modify the value by calling another function. The code which I
> have written using upgrade_locks fails at run time. I have gone through
> the documentation & have cleared the code as best as I could to arrive at
> a condensed usecase. I have also attached some sample errorenous outputs
> & a backtrace of the threaad in question. Can someone please have a look?
>
> Linux architecture_233 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008
> x86_64 x86_64 x86_64 GNU/Linux
> GNU C Library stable release version 2.5, by Roland McGrath et al.
> Compiled by GNU CC version 4.1.2 20080704 (Red Hat 4.1.2-44).
> Compiled on a Linux 2.6.9 system on 2009-01-05.
> Available extensions:
> The C stubs add-on version 2.1.2.
> crypt add-on version 2.1 by Michael Glad and others
> GNU Libidn by Simon Josefsson
> GNU libio by Per Bothner
> NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
> Native POSIX Threads Library by Ulrich Drepper et al
> BIND-8.2.3-T5B
> RT using linux kernel aio
> Thread-local storage support included.
>
> #include <iostream>
> #include <boost/thread.hpp>
> class boostThreadLocksTest
> {
> public:
> boost::shared_mutex myMutex;
> boost::upgrade_lock<boost::shared_mutex> myLock;
> static int firstFunction(boostThreadLocksTest
> *pBoostThreadLocksTest);
> static int secondFunction(boostThreadLocksTest
> *pBoostThreadLocksTest);
> boostThreadLocksTest():myMutex(),myLock(myMutex,boost::defer_lock_t()){};
> };
> int boostThreadLocksTest::firstFunction(boostThreadLocksTest
> *pBoostThreadLocksTest)
> {
> std::cout<<"Before Locking
> "<<boost::this_thread::get_id()<<" "<<__PRETTY_FUNCTION__<<std::endl;
> pBoostThreadLocksTest->myLock.lock();
> std::cout<<"After Locking
> "<<boost::this_thread::get_id()<<" "<<__PRETTY_FUNCTION__<<std::endl;
> pBoostThreadLocksTest->secondFunction(pBoostThreadLocksTest);
> std::cout<<"Returned From Call
> "<<boost::this_thread::get_id()<<" "<<__PRETTY_FUNCTION__<<std::endl;
> pBoostThreadLocksTest->myLock.unlock();
> std::cout<<"After Unlocking
> "<<boost::this_thread::get_id()<<" "<<__PRETTY_FUNCTION__<<std::endl;
> return(0);
> }
> int boostThreadLocksTest::secondFunction(boostThreadLocksTest
> *pBoostThreadLocksTest)
> {
> std::cout<<"Before Exclusive Locking
> "<<boost::this_thread::get_id()<<" "<<__PRETTY_FUNCTION__<<std::endl;
> boost::upgrade_to_unique_lock<boost::shared_mutex>
> localUniqueLock(pBoostThreadLocksTest->myLock);
> std::cout<<"After Exclusive Locking
> "<<boost::this_thread::get_id()<<" "<<__PRETTY_FUNCTION__<<std::endl;
> return(0);
> }
> int main()
> {
> boostThreadLocksTest myObject;
> boost::thread_group myThreadGroup;
> myThreadGroup.create_thread(boost::bind(boostThreadLocksTest::firstFunction,&myObject));
> myThreadGroup.create_thread(boost::bind(boostThreadLocksTest::firstFunction,&myObject));
> myThreadGroup.create_thread(boost::bind(boostThreadLocksTest::firstFunction,&myObject));
> myThreadGroup.join_all();
> }
>
> /*
> Before Locking 0x7694120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> After Locking 0x7694120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Before Exclusive Locking 0x7694120 static int
> boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
> After Exclusive Locking 0x7694120 static int
> boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
> Returned From Call 0x7694120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> After Unlocking 0x7694120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Before Locking 0x76943e0 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> After Locking 0x76943e0 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Before Exclusive Locking 0x76943e0 static int
> boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
> After Exclusive Locking 0x76943e0 static int
> boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
> Before Locking 0x76946e0 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Returned From Call 0x76943e0 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> terminate called after throwing an instance of
> 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error>
> >'
> what(): boost::lock_error
> Aborted
>
> Before Locking 0x1888e120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> After Locking 0x1888e120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Before Exclusive Locking 0x1888e120 static int
> boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
> After Exclusive Locking 0x1888e120 static int
> boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
> Before Locking 0x1888e3e0 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Returned From Call 0x1888e120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> terminate called after throwing an instance of
> 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error>
> >'
> what(): boost::lock_error
> Returned From Call 0x1888e120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Aborted
>
> Before Locking 0x18f62120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> After Locking 0x18f62120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Before Exclusive Locking 0x18f62120 static int
> boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
> After Exclusive Locking 0x18f62120 static int
> boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
> Before Locking 0x18f623e0 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Returned From Call 0x18f62120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> terminate called after throwing an instance of
> 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error>
> >'
> what(): boost::lock_error
> Returned From Call 0x18f62120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Aborted
>
> Before Locking 0x1a2a1120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> After Locking 0x1a2a1120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Before Exclusive Locking 0x1a2a1120 static int
> boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
> After Exclusive Locking 0x1a2a1120 static int
> boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
> Before Locking 0x1a2a13e0 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Returned From Call 0x1a2a1120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> terminate called after throwing an instance of
> 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error>
> >'
> what(): boost::lock_error
> Returned From Call 0x1a2a1120 static int
> boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
> Aborted
> */
>
> Program terminated with signal 6, Aborted.
> [New process 9574]
> [New process 9573]
> [New process 9571]
> #0 0x00000039f8430215 in raise () from /lib64/libc.so.6
> (gdb) bt
> #0 0x00000039f8430215 in raise () from /lib64/libc.so.6
> #1 0x00000039f8431cc0 in abort () from /lib64/libc.so.6
> #2 0x00000039fa0bec44 in __gnu_cxx::__verbose_terminate_handler () from
> /usr/lib64/libstdc++.so.6
> #3 0x00000039fa0bcdb6 in ?? () from /usr/lib64/libstdc++.so.6
> #4 0x00000039fa0bcde3 in std::terminate () from
> /usr/lib64/libstdc++.so.6
> #5 0x00000039fa0bceca in __cxa_throw () from /usr/lib64/libstdc++.so.6
> #6 0x00000000004108cf in boost::throw_exception<boost::lock_error> ()
> #7 0x000000000041a1a0 in boost::upgrade_lock<boost::shared_mutex>::lock
> ()
> #8 0x0000000000405e19 in boostThreadLocksTest::firstFunction ()
> #9 0x0000000000409c36 in
> boost::_bi::list1<boost::_bi::value<boostThreadLocksTest*>
> >::operator()<int, int (*)(boostThreadLocksTest*), boost::_bi::list0> ()
> #10 0x0000000000409c74 in boost::_bi::bind_t<int, int
> (*)(boostThreadLocksTest*),
> boost::_bi::list1<boost::_bi::value<boostThreadLocksTest*> >
> >::operator() ()
> #11 0x0000000000409c92 in
> boost::detail::thread_data<boost::_bi::bind_t<int, int
> (*)(boostThreadLocksTest*),
> boost::_bi::list1<boost::_bi::value<boostThreadLocksTest*> > > >::run ()
> #12 0x00002b627c120bbb in thread_proxy () from
> /usr/local/lib/libboost_thread.so.1.43.0
> #13 0x00000039f9006367 in start_thread () from /lib64/libpthread.so.0
> #14 0x00000039f84d30ad in clone () from /lib64/libc.so.6
>
> #0 0x00000039f84c56db in write () from /lib64/libc.so.6
> #1 0x00000039f846ba63 in _IO_new_file_write () from /lib64/libc.so.6
> #2 0x00000039f846b976 in _IO_new_do_write () from /lib64/libc.so.6
> #3 0x00000039f846c0f4 in _IO_new_file_overflow () from /lib64/libc.so.6
> #4 0x00000039f8469286 in putc () from /lib64/libc.so.6
> #5 0x00000039fa08ff2f in std::ostream::put () from
> /usr/lib64/libstdc++.so.6
> #6 0x00000039fa090010 in std::endl<char, std::char_traits<char> > ()
> from /usr/lib64/libstdc++.so.6
> #7 0x0000000000405d4a in boostThreadLocksTest::secondFunction ()
> #8 0x0000000000405e9b in boostThreadLocksTest::firstFunction ()
> #9 0x0000000000409c36 in
> boost::_bi::list1<boost::_bi::value<boostThreadLocksTest*>
> >::operator()<int, int (*)(boostThreadLocksTest*), boost::_bi::list0> ()
> #10 0x0000000000409c74 in boost::_bi::bind_t<int, int
> (*)(boostThreadLocksTest*),
> boost::_bi::list1<boost::_bi::value<boostThreadLocksTest*> >
> >::operator() ()
> #11 0x0000000000409c92 in
> boost::detail::thread_data<boost::_bi::bind_t<int, int
> (*)(boostThreadLocksTest*),
> boost::_bi::list1<boost::_bi::value<boostThreadLocksTest*> > > >::run ()
> #12 0x00002b627c120bbb in thread_proxy () from
> /usr/local/lib/libboost_thread.so.1.43.0
> #13 0x00000039f9006367 in start_thread () from /lib64/libpthread.so.0
> #14 0x00000039f84d30ad in clone () from /lib64/libc.so.6
>
> #0 0x00000039f900a899 in pthread_cond_wait@@GLIBC_2.3.2 () from
> /lib64/libpthread.so.0
> #1 0x00002b627c1224e7 in boost::thread::join () from
> /usr/local/lib/libboost_thread.so.1.43.0
> #2 0x000000000041aa47 in boost::thread_group::join_all ()
> #3 0x0000000000405be3 in main ()

New description:

 Hello
 I am trying to model a usecase where a member function reads in a value &
 now has to modify the value by calling another function. The code which I
 have written using upgrade_locks fails at run time. I have gone through
 the documentation & have cleared the code as best as I could to arrive at
 a condensed usecase. I have also attached some sample errorenous outputs &
 a backtrace of the threaad in question. Can someone please have a look?


 {{{
 Linux architecture_233 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008
 x86_64 x86_64 x86_64 GNU/Linux
 GNU C Library stable release version 2.5, by Roland McGrath et al.
 Compiled by GNU CC version 4.1.2 20080704 (Red Hat 4.1.2-44).
 Compiled on a Linux 2.6.9 system on 2009-01-05.
 Available extensions:
         The C stubs add-on version 2.1.2.
         crypt add-on version 2.1 by Michael Glad and others
         GNU Libidn by Simon Josefsson
         GNU libio by Per Bothner
         NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
         Native POSIX Threads Library by Ulrich Drepper et al
         BIND-8.2.3-T5B
         RT using linux kernel aio
 }}}

 Thread-local storage support included.


 {{{
 #include <iostream>
 #include <boost/thread.hpp>
 class boostThreadLocksTest
 {
         public:
                 boost::shared_mutex myMutex;
                 boost::upgrade_lock<boost::shared_mutex> myLock;
                 static int firstFunction(boostThreadLocksTest
 *pBoostThreadLocksTest);
                 static int secondFunction(boostThreadLocksTest
 *pBoostThreadLocksTest);
 boostThreadLocksTest():myMutex(),myLock(myMutex,boost::defer_lock_t()){};
 };
 int boostThreadLocksTest::firstFunction(boostThreadLocksTest
 *pBoostThreadLocksTest)
 {
         std::cout<<"Before Locking
 "<<boost::this_thread::get_id()<<" "<<__PRETTY_FUNCTION__<<std::endl;
         pBoostThreadLocksTest->myLock.lock();
         std::cout<<"After Locking
 "<<boost::this_thread::get_id()<<" "<<__PRETTY_FUNCTION__<<std::endl;
         pBoostThreadLocksTest->secondFunction(pBoostThreadLocksTest);
         std::cout<<"Returned From Call
 "<<boost::this_thread::get_id()<<" "<<__PRETTY_FUNCTION__<<std::endl;
         pBoostThreadLocksTest->myLock.unlock();
         std::cout<<"After Unlocking
 "<<boost::this_thread::get_id()<<" "<<__PRETTY_FUNCTION__<<std::endl;
         return(0);
 }
 int boostThreadLocksTest::secondFunction(boostThreadLocksTest
 *pBoostThreadLocksTest)
 {
         std::cout<<"Before Exclusive Locking
 "<<boost::this_thread::get_id()<<" "<<__PRETTY_FUNCTION__<<std::endl;
         boost::upgrade_to_unique_lock<boost::shared_mutex>
 localUniqueLock(pBoostThreadLocksTest->myLock);
         std::cout<<"After Exclusive Locking
 "<<boost::this_thread::get_id()<<" "<<__PRETTY_FUNCTION__<<std::endl;
         return(0);
 }
 int main()
 {
         boostThreadLocksTest myObject;
         boost::thread_group myThreadGroup;
 myThreadGroup.create_thread(boost::bind(boostThreadLocksTest::firstFunction,&myObject));
 myThreadGroup.create_thread(boost::bind(boostThreadLocksTest::firstFunction,&myObject));
 myThreadGroup.create_thread(boost::bind(boostThreadLocksTest::firstFunction,&myObject));
         myThreadGroup.join_all();
 }
 }}}



 {{{
 /*
 Before Locking 0x7694120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 After Locking 0x7694120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Before Exclusive Locking 0x7694120 static int
 boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
 After Exclusive Locking 0x7694120 static int
 boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
 Returned From Call 0x7694120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 After Unlocking 0x7694120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Before Locking 0x76943e0 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 After Locking 0x76943e0 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Before Exclusive Locking 0x76943e0 static int
 boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
 After Exclusive Locking 0x76943e0 static int
 boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
 Before Locking 0x76946e0 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Returned From Call 0x76943e0 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 terminate called after throwing an instance of
 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error>
>'
 what(): boost::lock_error
 Aborted

 Before Locking 0x1888e120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 After Locking 0x1888e120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Before Exclusive Locking 0x1888e120 static int
 boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
 After Exclusive Locking 0x1888e120 static int
 boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
 Before Locking 0x1888e3e0 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Returned From Call 0x1888e120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 terminate called after throwing an instance of
 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error>
>'
 what(): boost::lock_error
 Returned From Call 0x1888e120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Aborted

 Before Locking 0x18f62120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 After Locking 0x18f62120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Before Exclusive Locking 0x18f62120 static int
 boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
 After Exclusive Locking 0x18f62120 static int
 boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
 Before Locking 0x18f623e0 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Returned From Call 0x18f62120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 terminate called after throwing an instance of
 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error>
>'
 what(): boost::lock_error
 Returned From Call 0x18f62120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Aborted

 Before Locking 0x1a2a1120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 After Locking 0x1a2a1120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Before Exclusive Locking 0x1a2a1120 static int
 boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
 After Exclusive Locking 0x1a2a1120 static int
 boostThreadLocksTest::secondFunction(boostThreadLocksTest*)
 Before Locking 0x1a2a13e0 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Returned From Call 0x1a2a1120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 terminate called after throwing an instance of
 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error>
>'
 what(): boost::lock_error
 Returned From Call 0x1a2a1120 static int
 boostThreadLocksTest::firstFunction(boostThreadLocksTest*)
 Aborted
 */

 Program terminated with signal 6, Aborted.
 [New process 9574]
 [New process 9573]
 [New process 9571]
 #0 0x00000039f8430215 in raise () from /lib64/libc.so.6
 (gdb) bt
 #0 0x00000039f8430215 in raise () from /lib64/libc.so.6
 #1 0x00000039f8431cc0 in abort () from /lib64/libc.so.6
 #2 0x00000039fa0bec44 in __gnu_cxx::__verbose_terminate_handler () from
 /usr/lib64/libstdc++.so.6
 #3 0x00000039fa0bcdb6 in ?? () from /usr/lib64/libstdc++.so.6
 #4 0x00000039fa0bcde3 in std::terminate () from /usr/lib64/libstdc++.so.6
 #5 0x00000039fa0bceca in __cxa_throw () from /usr/lib64/libstdc++.so.6
 #6 0x00000000004108cf in boost::throw_exception<boost::lock_error> ()
 #7 0x000000000041a1a0 in boost::upgrade_lock<boost::shared_mutex>::lock
 ()
 #8 0x0000000000405e19 in boostThreadLocksTest::firstFunction ()
 #9 0x0000000000409c36 in
 boost::_bi::list1<boost::_bi::value<boostThreadLocksTest*>
>::operator()<int, int (*)(boostThreadLocksTest*), boost::_bi::list0> ()
 #10 0x0000000000409c74 in boost::_bi::bind_t<int, int
 (*)(boostThreadLocksTest*),
 boost::_bi::list1<boost::_bi::value<boostThreadLocksTest*> > >::operator()
 ()
 #11 0x0000000000409c92 in
 boost::detail::thread_data<boost::_bi::bind_t<int, int
 (*)(boostThreadLocksTest*),
 boost::_bi::list1<boost::_bi::value<boostThreadLocksTest*> > > >::run ()
 #12 0x00002b627c120bbb in thread_proxy () from
 /usr/local/lib/libboost_thread.so.1.43.0
 #13 0x00000039f9006367 in start_thread () from /lib64/libpthread.so.0
 #14 0x00000039f84d30ad in clone () from /lib64/libc.so.6

 #0 0x00000039f84c56db in write () from /lib64/libc.so.6
 #1 0x00000039f846ba63 in _IO_new_file_write () from /lib64/libc.so.6
 #2 0x00000039f846b976 in _IO_new_do_write () from /lib64/libc.so.6
 #3 0x00000039f846c0f4 in _IO_new_file_overflow () from /lib64/libc.so.6
 #4 0x00000039f8469286 in putc () from /lib64/libc.so.6
 #5 0x00000039fa08ff2f in std::ostream::put () from
 /usr/lib64/libstdc++.so.6
 #6 0x00000039fa090010 in std::endl<char, std::char_traits<char> > () from
 /usr/lib64/libstdc++.so.6
 #7 0x0000000000405d4a in boostThreadLocksTest::secondFunction ()
 #8 0x0000000000405e9b in boostThreadLocksTest::firstFunction ()
 #9 0x0000000000409c36 in
 boost::_bi::list1<boost::_bi::value<boostThreadLocksTest*>
>::operator()<int, int (*)(boostThreadLocksTest*), boost::_bi::list0> ()
 #10 0x0000000000409c74 in boost::_bi::bind_t<int, int
 (*)(boostThreadLocksTest*),
 boost::_bi::list1<boost::_bi::value<boostThreadLocksTest*> > >::operator()
 ()
 #11 0x0000000000409c92 in
 boost::detail::thread_data<boost::_bi::bind_t<int, int
 (*)(boostThreadLocksTest*),
 boost::_bi::list1<boost::_bi::value<boostThreadLocksTest*> > > >::run ()
 #12 0x00002b627c120bbb in thread_proxy () from
 /usr/local/lib/libboost_thread.so.1.43.0
 #13 0x00000039f9006367 in start_thread () from /lib64/libpthread.so.0
 #14 0x00000039f84d30ad in clone () from /lib64/libc.so.6

 #0 0x00000039f900a899 in pthread_cond_wait@@GLIBC_2.3.2 () from
 /lib64/libpthread.so.0
 #1 0x00002b627c1224e7 in boost::thread::join () from
 /usr/local/lib/libboost_thread.so.1.43.0
 #2 0x000000000041aa47 in boost::thread_group::join_all ()
 #3 0x0000000000405be3 in main ()
 }}}

--
-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/4648#comment:4>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:13 UTC