diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Context.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Context.java
index 089c1f6fba9896b432d92e4a329a2d1d7b75493f..b002c4884753b040aa1f819f1f955610cafbc587 100644
--- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Context.java
+++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nfi/TruffleNFI_Context.java
@@ -369,13 +369,13 @@ final class TruffleNFI_Context extends RFFIContext {
             UnsafeAdapter.UNSAFE.freeMemory(ptr);
         }
         transientAllocations.clear();
+        RuntimeException lastUpCallEx = getLastUpCallException();
+        setLastUpCallException(null);
         if (hasAccessLock) {
             releaseLock();
         }
-        RuntimeException lastUpCallEx = getLastUpCallException();
         if (lastUpCallEx != null) {
             CompilerDirectives.transferToInterpreter();
-            setLastUpCallException(null);
             throw lastUpCallEx;
         }
     }