From 67c19a60e7834da0bab7d56e6e938a785d24373d Mon Sep 17 00:00:00 2001
From: stepan <stepan.sindelar@oracle.com>
Date: Wed, 7 Mar 2018 15:19:41 +0100
Subject: [PATCH] NativeMirror IDs are invalid addresses

---
 .../com/oracle/truffle/r/runtime/data/NativeDataAccess.java | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/NativeDataAccess.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/NativeDataAccess.java
index a3b1d40cb2..7bddf458f7 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/NativeDataAccess.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/NativeDataAccess.java
@@ -126,7 +126,7 @@ public final class NativeDataAccess {
         private Object nativeWrapper;
 
         NativeMirror() {
-            this.id = counter.incrementAndGet();
+            this.id = counter.addAndGet(2);
         }
 
         /**
@@ -187,7 +187,9 @@ public final class NativeDataAccess {
         }
     }
 
-    private static final AtomicLong counter = new AtomicLong(0xdef000000000000L);
+    // The counter is initialized to invalid address and incremented by 2 to always get invalid
+    // address value
+    private static final AtomicLong counter = new AtomicLong(0xdef000000000001L);
     private static final ConcurrentHashMap<Long, WeakReference<RObject>> nativeMirrors = new ConcurrentHashMap<>();
     private static final ConcurrentHashMap<Long, RuntimeException> nativeMirrorInfo = new ConcurrentHashMap<>();
 
-- 
GitLab