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

Colin Patrick McCabe updated HDFS-3579:
---------------------------------------

    Attachment: HDFS-3579.004.patch

This change fixes exception handling in libhdfs.

It establishes the convention that we clear pending exceptions as soon as they 
are raised.  We never assume that the caller of the function will perform this 
cleanup-- the function itself must do it.  This is important to do because when 
exceptions are pending in a thread, most JNI calls cannot be made (with the 
exception of DeleteLocalReference and a few others).  The caller of the 
function is responsible for freeing the local reference to the exception, if 
one was returned.

This clears up the warnings about JNI calls being made while exceptions are 
pending.  It also fixes many, many cases where we create a local reference to 
an exception and then never dispose of it-- one source of memory leaks in 
long-running libhdfs-users like fuse_dfs.

Also fix some errno problems that could lead to errno not being set, or being 
set to something incorrect.  Most functions can clobber the value of errno.  So 
when returning errno from a libhdfs function, the assignment to errno should be 
literally the last statement executed.
                
> libhdfs: fix "WARNING in native method: JNI call made with exception pending" 
> in errnoFromException
> ---------------------------------------------------------------------------------------------------
>
>                 Key: HDFS-3579
>                 URL: https://issues.apache.org/jira/browse/HDFS-3579
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: libhdfs
>    Affects Versions: 2.1.0-alpha
>            Reporter: Colin Patrick McCabe
>            Assignee: Colin Patrick McCabe
>            Priority: Minor
>             Fix For: 2.1.0-alpha
>
>         Attachments: HDFS-3579.004.patch
>
>
> Running a libhdfs test program with -Xcheck:jni reveals some problems.
> {code}
> WARNING in native method: JNI call made with exception pending
> WARNING in native method: JNI call made with exception pending
> WARNING in native method: JNI call made with exception pending
> WARNING in native method: JNI call made with exception pending
> WARNING in native method: JNI call made with exception pending
> Exception in thread "main" java.io.IOException: ...
> {code}
> The problem seems to be that in errnoFromException, we are calling 
> classNameOfObject and some other JNI methods prior to clearing the pending 
> exception.  It should be simple enough to avoid doing this.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to