[
https://issues.apache.org/jira/browse/HDFS-13745?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16548123#comment-16548123
]
James Clampffer commented on HDFS-13745:
----------------------------------------
Patch ready for review.
asio's io_service::stop() only prevents future work from being run and doesn't
halt callbacks that are running. I added a BlockingStop method to the
hdfs::IoService that keeps a count of how many tasks are being executed by the
IoService and blocks until that's zero. The FileSystem destructor now uses
BlockingStop to make sure tasks are gone before the IoService is destroyed.
> libhdfs++: Fix race in FileSystem destructor
> --------------------------------------------
>
> Key: HDFS-13745
> URL: https://issues.apache.org/jira/browse/HDFS-13745
> Project: Hadoop HDFS
> Issue Type: Task
> Components: native
> Reporter: James Clampffer
> Assignee: James Clampffer
> Priority: Major
> Attachments: HDFS-13745.000.patch
>
>
> Whatever happens to have the last shared_ptr to the IoService will run
> ~IoService when the shared_ptr goes out of scope. IoService's destructor is
> responsible for joining all worker threads in the pool. Most callbacks now
> own weak_ptr<IoService> that can be promoted to a shared_ptr in order to post
> new async tasks. If a callback object is the last thing holding the
> IoService shared_ptr it's going to try to join the thread pool inside of one
> of the thread pool's threads.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]