[ 
https://issues.apache.org/jira/browse/HDFS-9590?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15067266#comment-15067266
 ] 

Xiao Chen commented on HDFS-9590:
---------------------------------

Thanks [~liuml07] for the comments. 
bq. Do you mean {{Storage$StorageDirectory#unlock()}}? There is no 
Storage#unlock method.
Yes, sorry I was unclear. Updated the title.
bq. Would you kindly elaborate what kind of "synchronization mechanism" do you 
expect to add? I don't know all the design assumption here either, but this 
code itself is to wrap a lock.
My concern is that if 2 threads are calling unlock(), and both passed the null 
check in the beginning, then if 1 proceed to set {{lock = null}}, the other 
will throw the NPE in the stack trace above. I'm thinking of adding 
synchronized to the method, or perhaps more sophisticated protection outside. 
This NPE seems fundamental, so I'm looking around to see what background 
stories there are...


> NPE in Storage#unlock
> ---------------------
>
>                 Key: HDFS-9590
>                 URL: https://issues.apache.org/jira/browse/HDFS-9590
>             Project: Hadoop HDFS
>          Issue Type: Bug
>            Reporter: Xiao Chen
>            Assignee: Xiao Chen
>
> The code looks to be possible to have race conditions in multiple-threaded 
> runs.
> {code}
>     public void unlock() throws IOException {
>       if (this.lock == null)
>         return;
>       this.lock.release();
>       lock.channel().close();
>       lock = null;
>     }
> {code}
> This is called in a handful of places, and I don't see any protection. Shall 
> we add some synchronization mechanism? Not sure if I missed any design 
> assumptions here.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to