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

Junping Du commented on HADOOP-12630:
-------------------------------------

Just quickly check Guava#UnsignedBytes.java, the related code has been updated 
to:
{code}
      private static sun.misc.Unsafe getUnsafe() {
          try {
              return sun.misc.Unsafe.getUnsafe();
          } catch (SecurityException tryReflectionInstead) {}
          try {
              return java.security.AccessController.doPrivileged
              (new java.security.PrivilegedExceptionAction<sun.misc.Unsafe>() {
                  public sun.misc.Unsafe run() throws Exception {
                      Class<sun.misc.Unsafe> k = sun.misc.Unsafe.class;
                      for (java.lang.reflect.Field f : k.getDeclaredFields()) {
                          f.setAccessible(true);
                          Object x = f.get(null);
                          if (k.isInstance(x))
                              return k.cast(x);
                      }
                      throw new NoSuchFieldError("the Unsafe");
                  }});
          } catch (java.security.PrivilegedActionException e) {
              throw new RuntimeException("Could not initialize intrinsics",
                                         e.getCause());
          }
      }
{code}
We can see two key differences with old code (the same with our current code 
base) are:
- simply use "sun.misc.Unsafe.getUnsafe();" for JDK case
- for non-JDK case, list all fields and check field type to be unsafe rather 
than check filed name "theUnsafe". The later way could be affected by unsafe 
class across different versions/implementations.

Shall we change our code to be the same with Guava or even consider to use 
Guava library directly (like many other places in Hadoop project)?

> Mususe of sun.misc.Unsafe causes midaligned memory access coredumps
> -------------------------------------------------------------------
>
>                 Key: HADOOP-12630
>                 URL: https://issues.apache.org/jira/browse/HADOOP-12630
>             Project: Hadoop Common
>          Issue Type: Sub-task
>          Components: native
>    Affects Versions: 2.6.0, 2.7.0, 3.0.0
>         Environment: Solaris SPARC
>            Reporter: Alan Burlison
>            Assignee: Alan Burlison
>
> Misuse of sun.misc.unsafe by {{org.apache.hadoop.io.FastByteComparisons}} 
> causes misaligned memory accesses and results in coredumps. Stack traces 
> below:
> {code}
> hadoop-tools/hadoop-gridmix/core
>  --- called from signal handler with signal 10 (SIGBUS) ---
>  ffffffff7717fa40 Unsafe_GetLong (18c000, ffffffff7e2fd6d8, 0, 19, 
> ffffffff775d4be0, 10018c000) + 158
>  ffffffff70810dcc * sun/misc/Unsafe.getLong(Ljava/lang/Object;J)J+-30004
>  ffffffff70810d70 * sun/misc/Unsafe.getLong(Ljava/lang/Object;J)J+0
>  ffffffff70806d58 * 
> org/apache/hadoop/io/FastByteComparisons$LexicographicalComparerHolder$UnsafeComparer.compareTo([BII[BII)I+91
>  (line 405)
>  ffffffff70806cb4 * 
> org/apache/hadoop/io/FastByteComparisons$LexicographicalComparerHolder$UnsafeComparer.compareTo(Ljava/lang/Object;IILjava/lang/Object;II)I+16
>  (line 264)
>  ffffffff7080783c * 
> org/apache/hadoop/io/FastByteComparisons.compareTo([BII[BII)I+11 (line 92)
>  ffffffff70806cb4 * 
> org/apache/hadoop/io/WritableComparator.compareBytes([BII[BII)I+8 (line 376)
>  ffffffff70806cb4 * 
> org/apache/hadoop/mapred/gridmix/GridmixRecord$Comparator.compare([BII[BII)I+61
>  (line 522)
>  ffffffff70806cb4 * 
> org/apache/hadoop/mapred/gridmix/TestGridmixRecord.binSortTest(Lorg/apache/hadoop/mapred/gridmix/GridmixRecord;Lorg/apache/hadoop/mapred/gridmix/GridmixRecord;IILorg/apache/hadoop/io/WritableComparator;)V+280
>  (line 268)
>  ffffffff70806f44 * 
> org/apache/hadoop/mapred/gridmix/TestGridmixRecord.testBaseRecord()V+57 (line 
> 482)
> {code}
> This also causes {{hadoop-mapreduce-project/hadoop-mapreduce-examples/core}}



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

Reply via email to