Boost logo

Boost Users :

Subject: Re: [Boost-users] Valgrind errors with ASIO
From: Bo Jensen (jensen.bo_at_[hidden])
Date: 2013-09-30 02:36:37


On Mon, Sep 30, 2013 at 1:20 AM, Gavin Lambert <gavinl_at_[hidden]>wrote:

> On 9/30/2013 5:41 PM, Quoth Bo Jensen:
>
>> I am calling it ala like this :
>>
>>
>> /* Create new tasks */
>> basistasks_[workerid] =
>> boost::make_shared<boost::**packaged_task<BasisSelectRet>
>> >(boost::bind(&**CallBasisSelection,&worker,**
>> boost::ref(io_error_[workerid]**)));
>>
>
> What is "worker" here? Could it become invalid before the join completes?
>
>
Worker is an instance of a class that does some work. It can not be become
invalid before, since it's destructor is called long after the thread is
destroyed.

> Also note that when passing it to a different thread it's safer to allow
> the shared_ptr to be copied rather than being passed by reference, although
> this probably isn't related to your current problem.

Thanks, I will change it.

>
>
> /* Helper function */
>> BasisSelectRet CallBasisSelection(TreeWorker
>> *worker,
>>
>> boost::shared_ptr<**ExceptionTransfer> &error)
>> {
>> BasisSelectRet ret = BasisSelectRetOk;
>>
>> try
>> {
>> worker->BasisSelection();
>> }
>> catch( ... )
>> {
>> error->SetException(boost::**current_exception());
>> }
>>
>> return ret;
>> }
>>
>
> You probably shouldn't be catching exceptions here. packaged_task will do
> that for you anyway, and as it stands I think there's a slim chance of a
> broken_promise exception that will bypass this code, so you'd need to catch
> where you're accessing the futures anyway. (If your number of jobs is
> larger than your number of threads.)
>
>
There's several issues with exceptions, I am following the approach in the
last example given in this post :

https://plus.google.com/u/0/102920706569335701415/posts/VuKMpMhKSnm

I have tested it works probably, which it does.

>
>
> ______________________________**_________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/**mailman/listinfo.cgi/boost-**users>
>



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