2009/3/9 tom fogal <tfogal@alumni.unh.edu>
I haven't used boost's locking mechanisms yet, but POSIX condvars
don't protect against spurious wakes.  Thus,

[snip]
>   //wait for an answer..
>   bool ready = _cond.timed_wait(lock, xt, boost::lambda::var(_data_ready));

you probably want this in a loop,

   while(!_data_ready) {
       _cond.timed_wait(... _data_ready);
   }

timed_wait with predicate (that's what OP used) does exactly this, it waits on condvar until predicate is satisfied. So problem is in some other place.

Roman.