You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mnemonic.apache.org by ga...@apache.org on 2016/11/21 17:32:30 UTC

[04/14] incubator-mnemonic git commit: MNEMONIC-151: Accept null transtable for volatile memory service

MNEMONIC-151: Accept null transtable for volatile memory service


Project: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/commit/51107ce6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/tree/51107ce6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/diff/51107ce6

Branch: refs/heads/master
Commit: 51107ce64d6f58f542a1ce949b821f25b17fa508
Parents: f600bd2
Author: Wang, Gang(Gary) <ga...@intel.com>
Authored: Sat Nov 12 12:26:21 2016 -0800
Committer: Wang, Gang(Gary) <ga...@intel.com>
Committed: Thu Nov 17 12:49:30 2016 -0800

----------------------------------------------------------------------
 .../mnemonic-utilities-service/src/main/native/common.c | 12 ++++++++----
 .../java/org/apache/mnemonic/VolatileMemAllocator.java  |  6 ++++++
 2 files changed, 14 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/51107ce6/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.c
----------------------------------------------------------------------
diff --git a/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.c b/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.c
index 998334b..7f7a35c 100644
--- a/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.c
+++ b/mnemonic-computing-services/mnemonic-utilities-service/src/main/native/common.c
@@ -106,8 +106,12 @@ struct NValueInfo *constructNValInfo(JNIEnv* env, jobject vinfoobj) {
     ret->dtype = (*env)->CallIntMethod(env, dutobj, getval_mtd);
 
     jobjectArray tbarr = (*env)->GetObjectField(env, vinfoobj, transtable_fid);
-    jsize tbarrlen = (*env)->GetArrayLength(env, tbarr);
-    if (NULL != tbarr && tbarrlen > 0){
+    jsize tbarrlen = 0;
+    ret->transtablesz = 0;
+    if (NULL != tbarr) {
+      tbarrlen = (*env)->GetArrayLength(env, tbarr);
+    }
+    if (tbarrlen > 0){
       ret->transtable = (struct transitem *)calloc(
           tbarrlen, sizeof(struct transitem));
       if (NULL != ret->transtable) {
@@ -281,7 +285,7 @@ inline void *to_e(JNIEnv* env, struct NValueInfo *nvinfo, long p) {
     }
     throw(env, "No item found in Translate Table.");
   } else {
-    throw(env, "NValueInfo or Translate Table is NULL.");
+    return p;
   }
   return NULL;
 }
@@ -298,7 +302,7 @@ inline long to_p(JNIEnv* env, struct NValueInfo *nvinfo, void *e) {
     }
     throw(env, "No item found in Translate Table.");
   } else {
-    throw(env, "NValueInfo or Translate Table is NULL.");
+    return e;
   }
   return -1L;
 }

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/51107ce6/mnemonic-core/src/main/java/org/apache/mnemonic/VolatileMemAllocator.java
----------------------------------------------------------------------
diff --git a/mnemonic-core/src/main/java/org/apache/mnemonic/VolatileMemAllocator.java b/mnemonic-core/src/main/java/org/apache/mnemonic/VolatileMemAllocator.java
index 453129b..4f4fdbc 100644
--- a/mnemonic-core/src/main/java/org/apache/mnemonic/VolatileMemAllocator.java
+++ b/mnemonic-core/src/main/java/org/apache/mnemonic/VolatileMemAllocator.java
@@ -480,6 +480,9 @@ public class VolatileMemAllocator extends RestorableAllocator<VolatileMemAllocat
   @Override
   public long getPortableAddress(long addr) {
     int i;
+    if (null == m_ttable) {
+      return addr;
+    }
     for (i = 0; i < m_ttable.length; ++i) {
       if (addr >= m_ttable[i][2] && addr < m_ttable[i][1] + m_ttable[i][2]) {
         return addr - m_ttable[i][2];
@@ -499,6 +502,9 @@ public class VolatileMemAllocator extends RestorableAllocator<VolatileMemAllocat
   @Override
   public long getEffectiveAddress(long addr) {
     int i;
+    if (null == m_ttable) {
+      return addr;
+    }
     for (i = 0; i < m_ttable.length; ++i) {
       if (addr >= m_ttable[i][0] && addr < m_ttable[i][1]) {
         return addr + m_ttable[i][2];