On 10/12/2019 18:45, Paul Sandoz wrote:
MemoryScope changes look good.

In j.u.concurrent we use ExceptionInInitializerError in the static blocks when 
there is an error looking up the VH,

FWIW close can also fail because it has already been closed but the exception 
message does not distinguish between the two states (active or already closed).
Paul.

Hi Paul,

would something like this be satisfactory?


diff -r 50ef46599c56 src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/MemoryScope.java --- a/src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/MemoryScope.java Tue Dec 10 16:28:03 2019 +0000 +++ b/src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/MemoryScope.java Wed Dec 11 00:12:20 2019 +0000
@@ -48,7 +48,7 @@
         try {
             COUNT_HANDLE = MethodHandles.lookup().findVarHandle(MemoryScope.class, "activeCount", int.class);
         } catch (Throwable ex) {
-            throw new IllegalStateException(ex);
+            throw new ExceptionInInitializerError(ex);
         }
     }

@@ -107,6 +107,9 @@

     void close() {
         if (!COUNT_HANDLE.compareAndSet(this, UNACQUIRED, CLOSED)) {
+            //first check if already closed...
+            checkAliveConfined();
+            //...if not, then we have acquired views that are still active
             throw new IllegalStateException("Cannot close a segment that has active acquired views");
         }
         if (cleanupAction != null) {



If you need a full webrev please let me know.

Thanks
Maurizio

Reply via email to