[ 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