[ 
https://issues.apache.org/jira/browse/HDFS-11436?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James Clampffer updated HDFS-11436:
-----------------------------------
    Attachment: HDFS-11436.HDFS-8707.000.patch

Patch to keep the promise alive and avoid the race condition.

> libhdfs++: Fix race condition in ScopedResolver
> -----------------------------------------------
>
>                 Key: HDFS-11436
>                 URL: https://issues.apache.org/jira/browse/HDFS-11436
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>          Components: hdfs-client
>            Reporter: James Clampffer
>            Assignee: James Clampffer
>         Attachments: HDFS-11436.HDFS-8707.000.patch
>
>
> ScopedResolver holds a shared_ptr to a std::promise to do async stuff while 
> the calling thread blocks.  The spec allows promise::set_value to unblock 
> future::wait immediately which causes future::get_value to race to read 
> whatever the promise contains before the state and value owned by the promise 
> is destroyed.  In this case even though the ScopedResolver holds a shared_ptr 
> to the promise which looks like it'd prevent this but it's possible for wait 
> to unblock fast enough for the destructor on ScopedResolver to be called 
> which ends up destroying the promise.  GCC's implementation tends of promises 
> and futures will hit this and will show up in valgrind as a bunch of invalid 
> reads if the timings are right to set up the race. 
> Simple fix right now is make sure the callback captures a shared_ptr to the 
> promise.  Longer term fix may be to make a class that encapsulates the 
> promise and future with a reference counting mechanism to prevent more of 
> these bugs and use that instead of the std lib versions.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to