|
Boost Users : |
Subject: Re: [Boost-users] Thread changes from Boost 1.38 to 1.45
From: Ven Tadipatri (ven.tadipatri_at_[hidden])
Date: 2011-02-01 11:04:18
Our application is quite large and it's hard to determine what exactly
is triggering the error. But the exception itself happens in the wait
method in condition_variable_any.
Actually, I do seem some calls to timed_wait so I think I might be
running into similar errors. Could you point me to how others have
resolved the problem?
The error message that's displayed is:
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
And I've confirmed that the error only exists when using Boost 1.45, not
Boost 1.38.
Here is what the wait method looks like in Boost 1.45:
template<typename lock_type>
void wait(lock_type& m)
{
int res=0;
{
thread_cv_detail::lock_on_exit<lock_type> guard;
detail::interruption_checker
check_for_interruption(&internal_mutex,&cond);
guard.activate(m);
res=pthread_cond_wait(&cond,&internal_mutex);
this_thread::interruption_point();
//error occurs here, when lock_on_exit's destructor is
called
}
if(res)
{
boost::throw_exception(condition_error());
}
}
This is the same method in Boost 1.38:
template<typename lock_type>
void wait(lock_type& m)
{
int res=0;
{
detail::interruption_checker check_for_interruption(&cond);
{
boost::pthread::pthread_mutex_scoped_lock
internal_lock(&internal_mutex);
m.unlock();
res=pthread_cond_wait(&cond,&internal_mutex);
//no equivalent lock_on_exit.
}
m.lock();
}
if(res)
{
throw condition_error();
}
}
Thanks,
Ven
On 02/01/2011 03:30 AM, Anthony Williams wrote:
> Ven Tadipatri<ven.tadipatri_at_[hidden]> writes:
>
>> Hi,
>> We upgraded our project from using Boost 1.38 to Boost 1.45 but now
>> seem to be having some thread issues. The error doesn't happen for
>> every run, but occasionally the wait method in condition_variable_any
>> fails. At other times the program seems to run into an infinite loop,
>> presumably waiting for a lock that's never released. I looked at the
>> changes in
>> http://www.boost.org/doc/libs/1_45_0/doc/html/thread/changes.html but
>> don't see what could be causing the error to occur only after
>> upgrading to Boost 1.45.
>> Has anyone else experienced their code breaking when upgrading to
>> the latest version of Boost?
> This seems similar to the problems people have experience with
> boost::this_thread::sleep (which I cannot reproduce), which relies on
> condition_variable::timed_wait.
>
> I don't think anything significant has changed in that area, so it
> surprises me that you are experiencing problems only after upgrading.
>
> Can you give more information about the problem? A small sample
> application that demonstrates it would be nice.
>
> Anthony
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