Boost logo

Boost Users :

Subject: Re: [Boost-users] [boost][thread] Future returning 0xfeeefeee
From: Klaim - Joël Lamotte (mjklaim_at_[hidden])
Date: 2013-04-06 19:02:42


On Sun, Apr 7, 2013 at 12:47 AM, Stefan Strasser <strasser_at_[hidden]>wrote:

> your example is not easy to read. IIUC, after execute(), the work queue is
> emptied and the last shared_ptr to struct K goes out of scope. K contains
> your promise and the future associated with it is accessed after the
> promise has been destroyed.
> try a breakpoint in the destructor of K to make sure, I don't have tbb
> installed to test.
>

In my last message I provided a simplified version without K. I just make a
shared_ptr of the promise.
As the use of the shared_ptr is inside the lambda and I push it in the
queue, and I captured it by copy, I know the promise is alive
until both the lambda and the do_some_work() function are both executed
fully.

So the promise is destroyed before setting the value to the future.
In doubt, I also tested by making the future before pushing the lambda. But
it's the same thing going on in sequential code like the one I provide in
the test.

When debugging, I can see that the future is set when the
promise.set_value() is called.
However, it seem that the return of future.get() is wrong, but when I go
step by step inside the get() implementation, I don't see where the value
is lost.

Could it be that the "reset" of boost::future corrupt the returned type?

I'm currently looking for other clues.

Joel Lamotte



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