[
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