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

Chris Nauroth commented on HDFS-6254:
-------------------------------------

[~huangkx], thanks again for the code sample.  I confirmed that the same 
behavior happens for me: run the program directly and I get the expected 
connection failure error, but run it under gdb and it dies with SIGSEGV.

I think the problem we're seeing is that the JVM actually traps SIGSEGV and 
runs its own signal handler to attempt recovery.  This is part of how the JVM 
interacts with the kernel to manage memory.  For example, see this code in 
OpenJDK:

http://hg.openjdk.java.net/jdk6/jdk6/hotspot/file/tip/src/os/linux/vm/os_linux.cpp#l3873

gdb's own signal handling appears to be interfering with this and choosing to 
suspend when it encounters a SIGSEGV.  This doesn't really represent a bug in 
the libhdfs code.  In fact, if I resume execution after the SIGSEGV by using 
the "fg" command, then it proceeds as expected, and I see the connection 
failure.

If you don't want gdb to suspend when it sees a SIGSEGV, then another option is 
to change its signal handling behavior by running this command:
{code}
(gdb) handle SIGSEGV nostop
{code}

BTW, I noticed a bug in the code sample you provided.  It does not call 
{{hdfsDisconnect}} on the allocated {{hdfsFS}} to free resources.  This is 
something that you'll want to add in your real code to avoid leaks.  Also note 
that the {{hdfsConnect}} function has been deprecated in favor of 
{{hdfsBuilderConnect}}.  For full details on this, refer to the hdfs.h header 
file.

At this point, I'm going to resolve this issue, because this behavior does not 
represent a bug in the libhdfs code.  I hope this was helpful.

> hdfsConnect segment fault where namenode not connected
> ------------------------------------------------------
>
>                 Key: HDFS-6254
>                 URL: https://issues.apache.org/jira/browse/HDFS-6254
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: libhdfs
>    Affects Versions: 2.2.0
>         Environment: Linux Centos 64bit
>            Reporter: huang ken
>
> When namenode is not started, the libhdfs client will cause segment fault 
> while connecting.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to