patches/NativeThread.patch
author chegar
Thu, 17 Oct 2019 20:27:44 +0100
branchdatagramsocketimpl-branch
changeset 58677 13588c901957
parent 57301 66c3aaf31f2b
permissions -rw-r--r--
Initial changes for datagramsocketimpl-branch
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57301
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
     1
diff -r 7d5a4a48e876 src/java.base/share/classes/java/lang/System.java
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
     2
--- a/src/java.base/share/classes/java/lang/System.java	Wed Mar 27 14:40:36 2019 -0700
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
     3
+++ b/src/java.base/share/classes/java/lang/System.java	Wed Apr 03 09:46:50 2019 +0100
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
     4
@@ -2172,6 +2172,12 @@
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
     5
             public void blockedOn(Interruptible b) {
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
     6
                 Thread.blockedOn(b);
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
     7
             }
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
     8
+            public void setNativeTid(long tid) {
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
     9
+                Thread.setNativeTid(tid);
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    10
+            }
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    11
+            public long nativeTid() {
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    12
+                return Thread.nativeTid();
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    13
+            }
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    14
             public void registerShutdownHook(int slot, boolean registerShutdownInProgress, Runnable hook) {
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    15
                 Shutdown.add(slot, registerShutdownInProgress, hook);
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    16
             }
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    17
diff -r 7d5a4a48e876 src/java.base/share/classes/java/lang/Thread.java
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    18
--- a/src/java.base/share/classes/java/lang/Thread.java	Wed Mar 27 14:40:36 2019 -0700
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    19
+++ b/src/java.base/share/classes/java/lang/Thread.java	Wed Apr 03 09:46:50 2019 +0100
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    20
@@ -241,6 +241,18 @@
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    21
     }
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    22
 
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    23
     /**
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    24
+     * Native thread id, cached here for use for threads are blocked in I/O
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    25
+     * operations.
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    26
+     */
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    27
+    private long nativeTid;
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    28
+    static void setNativeTid(long tid) {
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    29
+        Thread.currentThread().nativeTid = tid;
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    30
+    }
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    31
+    static long nativeTid() {
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    32
+        return Thread.currentThread().nativeTid;
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    33
+    }
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    34
+
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    35
+    /**
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    36
      * The minimum priority that a thread can have.
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    37
      */
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    38
     public static final int MIN_PRIORITY = 1;
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    39
diff -r 7d5a4a48e876 src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    40
--- a/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java	Wed Mar 27 14:40:36 2019 -0700
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    41
+++ b/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java	Wed Apr 03 09:46:50 2019 +0100
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    42
@@ -107,6 +107,16 @@
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    43
     void blockedOn(Interruptible b);
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    44
 
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    45
     /**
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    46
+     * Set the current thread's native ID
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    47
+     */
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    48
+    void setNativeTid(long tid);
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    49
+
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    50
+    /**
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    51
+     * Returns the current thread's native ID
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    52
+     */
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    53
+    long nativeTid();
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    54
+
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    55
+    /**
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    56
      * Registers a shutdown hook.
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    57
      *
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    58
      * It is expected that this method with registerShutdownInProgress=true
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    59
diff -r 7d5a4a48e876 src/java.base/unix/classes/sun/nio/ch/NativeThread.java
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    60
--- a/src/java.base/unix/classes/sun/nio/ch/NativeThread.java	Wed Mar 27 14:40:36 2019 -0700
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    61
+++ b/src/java.base/unix/classes/sun/nio/ch/NativeThread.java	Wed Apr 03 09:46:50 2019 +0100
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    62
@@ -25,7 +25,6 @@
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    63
 
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    64
 package sun.nio.ch;
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    65
 
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    66
-
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    67
 // Signalling operations on native threads
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    68
 //
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    69
 // On some operating systems (e.g., Linux), closing a channel while another
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    70
@@ -33,23 +32,35 @@
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    71
 // thread to be released.  This class provides access to the native threads
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    72
 // upon which Java threads are built, and defines a simple signal mechanism
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    73
 // that can be used to release a native thread from a blocking I/O operation.
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    74
-// On systems that do not require this type of signalling, the current() method
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    75
-// always returns -1 and the signal(long) method has no effect.
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    76
 
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    77
+import jdk.internal.access.JavaLangAccess;
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    78
+import jdk.internal.access.SharedSecrets;
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    79
 
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    80
 public class NativeThread {
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    81
+    private static final JavaLangAccess JLA = SharedSecrets.getJavaLangAccess();
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    82
 
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    83
-    // Returns an opaque token representing the native thread underlying the
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    84
-    // invoking Java thread.  On systems that do not require signalling, this
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    85
-    // method always returns -1.
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    86
-    //
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    87
-    public static native long current();
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    88
+    /**
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    89
+     * Returns the current thread's ID.
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    90
+     */
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    91
+    public static long current() {
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    92
+        long tid = JLA.nativeTid();
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    93
+        if (tid == 0) {
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    94
+            tid = current0();
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    95
+            JLA.setNativeTid(tid);
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    96
+        }
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    97
+        return tid;
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    98
+    }
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
    99
 
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   100
-    // Signals the given native thread so as to release it from a blocking I/O
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   101
-    // operation.  On systems that do not require signalling, this method has
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   102
-    // no effect.
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   103
-    //
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   104
-    public static native void signal(long nt);
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   105
+    /**
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   106
+     * Signals the given thread.
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   107
+     */
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   108
+    public static void signal(long tid) {
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   109
+        signal0(tid);
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   110
+    }
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   111
+
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   112
+    private static native long current0();
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   113
+
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   114
+    private static native void signal0(long tid);
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   115
 
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   116
     private static native void init();
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   117
 
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   118
diff -r 7d5a4a48e876 src/java.base/unix/native/libnio/ch/NativeThread.c
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   119
--- a/src/java.base/unix/native/libnio/ch/NativeThread.c	Wed Mar 27 14:40:36 2019 -0700
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   120
+++ b/src/java.base/unix/native/libnio/ch/NativeThread.c	Wed Apr 03 09:46:50 2019 +0100
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   121
@@ -77,7 +77,7 @@
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   122
 }
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   123
 
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   124
 JNIEXPORT jlong JNICALL
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   125
-Java_sun_nio_ch_NativeThread_current(JNIEnv *env, jclass cl)
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   126
+Java_sun_nio_ch_NativeThread_current0(JNIEnv *env, jclass cl)
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   127
 {
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   128
 #ifdef __solaris__
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   129
     return (jlong)thr_self();
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   130
@@ -87,7 +87,7 @@
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   131
 }
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   132
 
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   133
 JNIEXPORT void JNICALL
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   134
-Java_sun_nio_ch_NativeThread_signal(JNIEnv *env, jclass cl, jlong thread)
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   135
+Java_sun_nio_ch_NativeThread_signal0(JNIEnv *env, jclass cl, jlong thread)
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   136
 {
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   137
     int ret;
66c3aaf31f2b Move NativeThread.current() change to patch file
alanb
parents:
diff changeset
   138
 #ifdef __solaris__