diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/NestedLoopJoinOperatorDescriptor.java b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/NestedLoopJoinOperatorDescriptor.java
index 24e1b45..52dc241 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/NestedLoopJoinOperatorDescriptor.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/NestedLoopJoinOperatorDescriptor.java
@@ -133,8 +133,11 @@
 
                 @Override
                 public void close() throws HyracksDataException {
-                    state.joiner.closeCache();
-                    ctx.setStateObject(state);
+                    // state and state.joiner can be null if open() fails
+                    if (state != null && state.joiner != null) {
+                        state.joiner.closeCache();
+                        ctx.setStateObject(state);
+                    }
                 }
 
                 @Override
@@ -161,10 +164,10 @@
 
                 @Override
                 public void open() throws HyracksDataException {
-                    writer.open();
                     state = (JoinCacheTaskState) ctx.getStateObject(
                             new TaskId(new ActivityId(getOperatorId(), JOIN_CACHE_ACTIVITY_ID), partition));
                     state.joiner.setComparator(comparatorFactory.createTuplePairComparator(ctx));
+                    writer.open();
                 }
 
                 @Override
@@ -175,11 +178,7 @@
                 @Override
                 public void close() throws HyracksDataException {
                     if (failed) {
-                        try {
-                            state.joiner.closeCache();
-                        } finally {
-                            writer.close();
-                        }
+                        closeOnFail();
                         return;
                     }
                     try {
@@ -202,6 +201,29 @@
                     failed = true;
                     writer.fail();
                 }
+
+                private void closeOnFail() {
+                    try {
+                        // state can be null if open() fails
+                        JoinCacheTaskState stateObject = state;
+                        if (state == null) {
+                            // make sure if the state object is actually still in the ctx, then close the resources
+                            stateObject = (JoinCacheTaskState) ctx.getStateObject(
+                                    new TaskId(new ActivityId(getOperatorId(), JOIN_CACHE_ACTIVITY_ID), partition));
+                        }
+                        if (stateObject != null) {
+                            state.joiner.closeCache();
+                        }
+                    } catch (Exception e) {
+                        // ignore
+                    } finally {
+                        try {
+                            writer.close();
+                        } catch (Exception e) {
+                            // ignore
+                        }
+                    }
+                }
             };
         }
     }
