You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@reef.apache.org by se...@apache.org on 2015/12/11 19:43:57 UTC

reef git commit: [REEF-1065] Add Java Reference Cleanup for InterOp code

Repository: reef
Updated Branches:
  refs/heads/master d4da7c396 -> 9bf549458


[REEF-1065] Add Java Reference Cleanup for InterOp code

This addressed the issue by
  * Add Finalizer and Destructor in InterOp objects.
  * Call DeleteGlobalRef where NewGlobalRef is called.

JIRA:
  [REEF-1065](https://issues.apache.org/jira/browse/REEF-1065)

Pull Request:
  Closes #723


Project: http://git-wip-us.apache.org/repos/asf/reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/reef/commit/9bf54945
Tree: http://git-wip-us.apache.org/repos/asf/reef/tree/9bf54945
Diff: http://git-wip-us.apache.org/repos/asf/reef/diff/9bf54945

Branch: refs/heads/master
Commit: 9bf549458cceb57da52187eb4a713714e9111dc8
Parents: d4da7c3
Author: Andrew Chung <af...@gmail.com>
Authored: Thu Dec 10 18:01:11 2015 -0800
Committer: Beysim Sezgin <be...@hotmail.com>
Committed: Fri Dec 11 10:41:38 2015 -0800

----------------------------------------------------------------------
 .../ActiveContextClr2Java.cpp                   |  19 ++++
 .../AllocatedEvaluatorClr2Java.cpp              |  19 ++++
 .../ClosedContextClr2Java.cpp                   |  19 ++++
 lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h   | 100 ++++++++++++-------
 .../CompletedEvaluatorClr2Java.cpp              |  15 +++
 .../CompletedTaskClr2Java.cpp                   |  15 +++
 .../ContextMessageClr2Java.cpp                  |  23 +++++
 .../DriverRestartCompletedClr2Java.cpp          |  11 ++
 .../DriverRestartedClr2Java.cpp                 |  13 +++
 .../EvaluatorRequestorClr2Java.cpp              |  11 ++
 .../FailedContextClr2Java.cpp                   |  23 +++++
 .../FailedEvaluatorClr2Java.cpp                 |  15 +++
 .../FailedTaskClr2Java.cpp                      |  11 ++
 .../HttpServerClr2Java.cpp                      |  11 ++
 .../RunningTaskClr2Java.cpp                     |  15 +++
 .../SuspendedTaskClr2Java.cpp                   |  15 +++
 .../TaskMessageClr2Java.cpp                     |  15 +++
 17 files changed, 316 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/ActiveContextClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/ActiveContextClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/ActiveContextClr2Java.cpp
index 84f82e0..be2f271 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/ActiveContextClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/ActiveContextClr2Java.cpp
@@ -46,6 +46,25 @@ namespace Org {
 							ManagedLog::LOGGER->LogStop("ActiveContextClr2Java::ActiveContextClr2Java");
 						}
 
+						ActiveContextClr2Java::~ActiveContextClr2Java() {
+							this->!ActiveContextClr2Java();
+						}
+
+						ActiveContextClr2Java::!ActiveContextClr2Java() {
+							JNIEnv *env = RetrieveEnv(_jvm);
+							if (_jobjectActiveContext != NULL) {
+								env->DeleteGlobalRef(_jobjectActiveContext); 
+							}
+
+							if (_jstringId != NULL) {
+								env->DeleteGlobalRef(_jstringId);
+							}
+
+							if (_jstringEvaluatorId != NULL) {
+								env->DeleteGlobalRef(_jstringEvaluatorId);
+							}
+						}
+
 						void ActiveContextClr2Java::SubmitTask(String^ taskConfigStr) {
 							ManagedLog::LOGGER->LogStart("ActiveContextClr2Java::SubmitTask");
 							JNIEnv *env = RetrieveEnv(_jvm);

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/AllocatedEvaluatorClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/AllocatedEvaluatorClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/AllocatedEvaluatorClr2Java.cpp
index b23fb43..fc02a45 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/AllocatedEvaluatorClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/AllocatedEvaluatorClr2Java.cpp
@@ -50,6 +50,25 @@ namespace Org {
 						  ManagedLog::LOGGER->LogStop("AllocatedEvaluatorClr2Java::AllocatedEvaluatorClr2Java");
 					  }
 
+					  AllocatedEvaluatorClr2Java::~AllocatedEvaluatorClr2Java() {
+						  this->!AllocatedEvaluatorClr2Java();
+					  }
+
+					  AllocatedEvaluatorClr2Java::!AllocatedEvaluatorClr2Java() {
+						  JNIEnv *env = RetrieveEnv(_jvm);
+						  if (_jobjectAllocatedEvaluator != NULL) {
+							  env->DeleteGlobalRef(_jobjectAllocatedEvaluator);
+						  }
+
+						  if (_jstringId != NULL) {
+							  env->DeleteGlobalRef(_jstringId);
+						  }
+
+						  if (_jstringNameServerInfo != NULL) {
+							  env->DeleteGlobalRef(_jstringNameServerInfo);
+						  }
+					  }
+
 					  void AllocatedEvaluatorClr2Java::SubmitContext(String^ contextConfigStr) {
 						  ManagedLog::LOGGER->LogStart("AllocatedEvaluatorClr2Java::SubmitContext");
 						  JNIEnv *env = RetrieveEnv(_jvm);

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/ClosedContextClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/ClosedContextClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/ClosedContextClr2Java.cpp
index 70f6ca2..cac7b44 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/ClosedContextClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/ClosedContextClr2Java.cpp
@@ -47,6 +47,25 @@ namespace Org {
                             ManagedLog::LOGGER->LogStop("ClosedContextClr2Java::ClosedContextClr2Java");
                         }
 
+                        ClosedContextClr2Java::~ClosedContextClr2Java() {
+                            this->!ClosedContextClr2Java();
+                        }
+
+                        ClosedContextClr2Java::!ClosedContextClr2Java() {
+                            JNIEnv *env = RetrieveEnv(_jvm);
+                            if (_jobjectClosedContext != NULL) {
+                                env->DeleteGlobalRef(_jobjectClosedContext);
+                            }
+                            
+                            if (_jstringContextId != NULL) {
+                                env->DeleteGlobalRef(_jstringContextId);
+                            }
+
+                            if (_jstringEvaluatorId != NULL) {
+                                env->DeleteGlobalRef(_jstringEvaluatorId);
+                            }
+                        }
+
                         /**
                          * Gets the Parent context of the closed context through a JNI call to Java.
                          */

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h b/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h
index b4bdf69..4d270f2 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h
+++ b/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h
@@ -55,12 +55,14 @@ namespace Org {
                         };
 
                         public ref class AllocatedEvaluatorClr2Java : public IAllocatedEvaluaotrClr2Java {
-                            jobject  _jobjectAllocatedEvaluator;
+                            jobject  _jobjectAllocatedEvaluator = NULL;
                             JavaVM* _jvm;
-                            jstring _jstringId;
-                            jstring _jstringNameServerInfo;
+                            jstring _jstringId = NULL;
+                            jstring _jstringNameServerInfo = NULL;
                         public:
                             AllocatedEvaluatorClr2Java(JNIEnv *env, jobject jallocatedEvaluator);
+                            ~AllocatedEvaluatorClr2Java();
+                            !AllocatedEvaluatorClr2Java();
                             virtual void SubmitContextAndTask(String^ contextConfigStr, String^ taskConfigStr);
                             virtual void SubmitContext(String^ contextConfigStr);
                             virtual void SubmitContextAndService(String^ contextConfigStr, String^ serviceConfigStr);
@@ -73,12 +75,14 @@ namespace Org {
                         };
 
                         public ref class ActiveContextClr2Java : public IActiveContextClr2Java {
-                            jobject _jobjectActiveContext;
-                            jstring _jstringId;
-                            jstring _jstringEvaluatorId;
+                            jobject _jobjectActiveContext = NULL;
+                            jstring _jstringId = NULL;
+                            jstring _jstringEvaluatorId = NULL;
                             JavaVM* _jvm;
                         public:
                             ActiveContextClr2Java(JNIEnv *env, jobject jallocatedEvaluator);
+                            ~ActiveContextClr2Java();
+                            !ActiveContextClr2Java();
                             virtual void SubmitTask(String^ taskConfigStr);
                             virtual void Close();
                             virtual void OnError(String^ message);
@@ -89,40 +93,48 @@ namespace Org {
                         };
 
                         public ref class EvaluatorRequestorClr2Java : public IEvaluatorRequestorClr2Java {
-                            jobject  _jobjectEvaluatorRequestor;
+                            jobject  _jobjectEvaluatorRequestor = NULL;
                             JavaVM* _jvm;
                         public:
                             EvaluatorRequestorClr2Java(JNIEnv *env, jobject jevaluatorRequestor);
+                            ~EvaluatorRequestorClr2Java();
+                            !EvaluatorRequestorClr2Java();
                             virtual void OnError(String^ message);
                             virtual void Submit(IEvaluatorRequest^ request);
                         };
 
                         public ref class TaskMessageClr2Java : public ITaskMessageClr2Java {
-                            jobject  _jobjectTaskMessage;
+                            jobject  _jobjectTaskMessage = NULL;
                             JavaVM* _jvm;
-                            jstring _jstringId;
+                            jstring _jstringId = NULL;
                         public:
                             TaskMessageClr2Java(JNIEnv *env, jobject jtaskMessage);
+                            ~TaskMessageClr2Java();
+                            !TaskMessageClr2Java();
                             virtual void OnError(String^ message);
                             virtual String^ GetId();
                         };
 
                         public ref class FailedTaskClr2Java : public IFailedTaskClr2Java {
-                            jobject  _jobjectFailedTask;
+                            jobject  _jobjectFailedTask = NULL;
                             JavaVM* _jvm;
                         public:
                             FailedTaskClr2Java(JNIEnv *env, jobject jfailedTask);
+                            ~FailedTaskClr2Java();
+                            !FailedTaskClr2Java();
                             virtual void OnError(String^ message);
                             virtual IActiveContextClr2Java^ GetActiveContext();
                             virtual String^ GetString();
                         };
 
                         public ref class RunningTaskClr2Java : public IRunningTaskClr2Java {
-                            jobject  _jobjectRunningTask;
+                            jobject  _jobjectRunningTask = NULL;
                             JavaVM* _jvm;
-                            jstring _jstringId;
+                            jstring _jstringId = NULL;
                         public:
                             RunningTaskClr2Java(JNIEnv *env, jobject jrunningTask);
+                            ~RunningTaskClr2Java();
+                            !RunningTaskClr2Java();
                             virtual void OnError(String^ message);
                             virtual IActiveContextClr2Java^ GetActiveContext();
                             virtual String^ GetId();
@@ -130,21 +142,25 @@ namespace Org {
                         };
 
                         public ref class FailedEvaluatorClr2Java : public IFailedEvaluatorClr2Java {
-                            jobject  _jobjectFailedEvaluator;
+                            jobject  _jobjectFailedEvaluator = NULL;
                             JavaVM* _jvm;
-                            jstring _jstringId;
+                            jstring _jstringId = NULL;
                         public:
                             FailedEvaluatorClr2Java(JNIEnv *env, jobject jfailedEvaluator);
+                            ~FailedEvaluatorClr2Java();
+                            !FailedEvaluatorClr2Java();
                             virtual void OnError(String^ message);
                             virtual IEvaluatorRequestorClr2Java^ GetEvaluatorRequestor();
                             virtual String^ GetId();
                         };
 
                         public ref class HttpServerClr2Java : public IHttpServerBridgeClr2Java {
-                            jobject _jhttpServerEventBridge;
+                            jobject _jhttpServerEventBridge = NULL;
                             JavaVM* _jvm;
                         public:
                             HttpServerClr2Java(JNIEnv *env, jobject jhttpServerEventBridge);
+                            ~HttpServerClr2Java();
+                            !HttpServerClr2Java();
                             virtual void OnError(String^ message);
                             virtual String^ GetQueryString();
                             virtual void SetUriSpecification(String^ uriSpecification);
@@ -154,11 +170,13 @@ namespace Org {
                         };
 
                         public ref class CompletedTaskClr2Java : public ICompletedTaskClr2Java {
-                            jobject  _jobjectCompletedTask;
+                            jobject  _jobjectCompletedTask = NULL;
                             JavaVM* _jvm;
-                            jstring _jstringId;
+                            jstring _jstringId = NULL;
                         public:
                             CompletedTaskClr2Java(JNIEnv *env, jobject jcompletedTask);
+                            ~CompletedTaskClr2Java();
+                            !CompletedTaskClr2Java();
                             virtual void OnError(String^ message);
                             virtual IActiveContextClr2Java^ GetActiveContext();
                             virtual String^ GetId();
@@ -166,11 +184,13 @@ namespace Org {
                         };
 
                         public ref class SuspendedTaskClr2Java : public ISuspendedTaskClr2Java {
-                            jobject  _jobjectSuspendedTask;
+                            jobject  _jobjectSuspendedTask = NULL;
                             JavaVM* _jvm;
-                            jstring _jstringId;
+                            jstring _jstringId = NULL;
                         public:
                             SuspendedTaskClr2Java(JNIEnv *env, jobject jobjectSuspendedTask);
+                            ~SuspendedTaskClr2Java();
+                            !SuspendedTaskClr2Java();
                             virtual void OnError(String^ message);
                             virtual IActiveContextClr2Java^ GetActiveContext();
                             virtual String^ GetId();
@@ -178,22 +198,26 @@ namespace Org {
                         };
 
                         public ref class CompletedEvaluatorClr2Java : public ICompletedEvaluatorClr2Java {
-                            jobject  _jobjectCompletedEvaluator;
+                            jobject  _jobjectCompletedEvaluator = NULL;
                             JavaVM* _jvm;
-                            jstring _jstringId;
+                            jstring _jstringId = NULL;
                         public:
                             CompletedEvaluatorClr2Java(JNIEnv *env, jobject jobjectCompletedEvaluator);
+                            ~CompletedEvaluatorClr2Java();
+                            !CompletedEvaluatorClr2Java();
                             virtual void OnError(String^ message);
                             virtual String^ GetId();
                         };
 
                         public ref class ClosedContextClr2Java : public IClosedContextClr2Java {
-                            jobject  _jobjectClosedContext;
+                            jobject  _jobjectClosedContext = NULL;
                             JavaVM* _jvm;
-                            jstring _jstringContextId;
-                            jstring _jstringEvaluatorId;
+                            jstring _jstringContextId = NULL;
+                            jstring _jstringEvaluatorId = NULL;
                         public:
                             ClosedContextClr2Java(JNIEnv *env, jobject jobjectClosedContext);
+                            ~ClosedContextClr2Java();
+                            !ClosedContextClr2Java();
                             virtual void OnError(String^ message);
                             virtual String^ GetId();
                             virtual String^ GetEvaluatorId();
@@ -202,13 +226,15 @@ namespace Org {
                         };
 
                         public ref class FailedContextClr2Java : public IFailedContextClr2Java {
-                            jobject  _jobjectFailedContext;
+                            jobject  _jobjectFailedContext = NULL;
                             JavaVM* _jvm;
-                            jstring _jstringContextId;
-                            jstring _jstringEvaluatorId;
-                            jstring _jstringParentContextId;
+                            jstring _jstringContextId = NULL;
+                            jstring _jstringEvaluatorId = NULL;
+                            jstring _jstringParentContextId = NULL;
                         public:
                             FailedContextClr2Java(JNIEnv *env, jobject jobjectFailedContext);
+                            ~FailedContextClr2Java();
+                            !FailedContextClr2Java();
                             virtual void OnError(String^ message);
                             virtual String^ GetId();
                             virtual String^ GetEvaluatorId();
@@ -218,13 +244,15 @@ namespace Org {
                         };
 
                         public ref class ContextMessageClr2Java : public IContextMessageClr2Java {
-                            jobject  _jobjectContextMessage;
+                            jobject  _jobjectContextMessage = NULL;
                             JavaVM* _jvm;
-                            jbyteArray _jarrayMessage;
-                            jstring _jstringId;
-                            jstring _jstringSourceId;
+                            jbyteArray _jarrayMessage = NULL;
+                            jstring _jstringId = NULL;
+                            jstring _jstringSourceId = NULL;
                         public:
                             ContextMessageClr2Java(JNIEnv *env, jobject jobjectContextMessage);
+                            ~ContextMessageClr2Java();
+                            !ContextMessageClr2Java();
                             virtual void OnError(String^ message);
                             virtual array<byte>^ Get();
                             virtual String^ GetId();
@@ -232,13 +260,15 @@ namespace Org {
                         };
 
                         public ref class DriverRestartedClr2Java : public IDriverRestartedClr2Java {
-                            jobject _jobjectDriverRestarted;
+                            jobject _jobjectDriverRestarted = NULL;
                             JavaVM* _jvm;
                             array<String^>^ _expectedEvaluatorIds;
                             DateTime _startTime;
                             int _resubmissionAttempts;
                         public:
                             DriverRestartedClr2Java(JNIEnv *env, jobject jobjectDriverRestarted);
+                            ~DriverRestartedClr2Java();
+                            !DriverRestartedClr2Java();
                             virtual void OnError(String^ message);
                             virtual array<String^>^ GetExpectedEvaluatorIds();
                             virtual DateTime GetStartTime();
@@ -246,12 +276,14 @@ namespace Org {
                         };
 
                         public ref class DriverRestartCompletedClr2Java : public IDriverRestartCompletedClr2Java {
-                            jobject _jobjectDriverRestartCompleted;
+                            jobject _jobjectDriverRestartCompleted = NULL;
                             JavaVM* _jvm;
                             DateTime _restartCompletedTime;
                             bool _isTimedOut;
                         public:
                             DriverRestartCompletedClr2Java(JNIEnv *env, jobject jobobjectDriverRestartCompleted);
+                            ~DriverRestartCompletedClr2Java();
+                            !DriverRestartCompletedClr2Java();
                             virtual void OnError(String^ message);
                             virtual DateTime GetCompletedTime();
                             virtual bool IsTimedOut();

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/CompletedEvaluatorClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/CompletedEvaluatorClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/CompletedEvaluatorClr2Java.cpp
index 6c09826..3f54ec1 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/CompletedEvaluatorClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/CompletedEvaluatorClr2Java.cpp
@@ -42,6 +42,21 @@ namespace Org {
 						  ManagedLog::LOGGER->LogStop("CompletedEvaluatorClr2Java::CompletedEvaluatorClr2Java");
 					  }
 
+					  CompletedEvaluatorClr2Java::~CompletedEvaluatorClr2Java() {
+						  this->!CompletedEvaluatorClr2Java();
+					  }
+
+					  CompletedEvaluatorClr2Java::!CompletedEvaluatorClr2Java() {
+						  JNIEnv *env = RetrieveEnv(_jvm);
+						  if (_jobjectCompletedEvaluator != NULL) {
+							  env->DeleteGlobalRef(_jobjectCompletedEvaluator);
+						  }
+
+						  if (_jstringId != NULL) {
+							  env->DeleteGlobalRef(_jstringId); 
+						  }
+					  }
+
 					  void CompletedEvaluatorClr2Java::OnError(String^ message) {
 						  ManagedLog::LOGGER->Log("CompletedEvaluatorClr2Java::OnError");
 						  JNIEnv *env = RetrieveEnv(_jvm);

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/CompletedTaskClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/CompletedTaskClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/CompletedTaskClr2Java.cpp
index 50f1b42..f8790bf 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/CompletedTaskClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/CompletedTaskClr2Java.cpp
@@ -43,6 +43,21 @@ namespace Org {
 						  ManagedLog::LOGGER->LogStop("CompletedTaskClr2Java::CompletedTaskClr2Java");
 					  }
 
+					  CompletedTaskClr2Java::~CompletedTaskClr2Java(){
+						  this->!CompletedTaskClr2Java();
+					  }
+
+					  CompletedTaskClr2Java::!CompletedTaskClr2Java() {
+						  JNIEnv *env = RetrieveEnv(_jvm);
+						  if (_jobjectCompletedTask != NULL) {
+							  env->DeleteGlobalRef(_jobjectCompletedTask);
+						  }
+
+						  if (_jstringId != NULL) {
+							  env->DeleteGlobalRef(_jstringId);
+						  }
+					  }
+
 					  void CompletedTaskClr2Java::OnError(String^ message) {
 						  ManagedLog::LOGGER->Log("CompletedTaskClr2Java::OnError");
 						  JNIEnv *env = RetrieveEnv(_jvm);

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/ContextMessageClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/ContextMessageClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/ContextMessageClr2Java.cpp
index 18ff378..d3d594d 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/ContextMessageClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/ContextMessageClr2Java.cpp
@@ -48,6 +48,29 @@ namespace Org {
 						  ManagedLog::LOGGER->LogStop("ContextMessageClr2Java::ContextMessageClr2Java");
 					  }
 
+					  ContextMessageClr2Java::~ContextMessageClr2Java() {
+						  this->!ContextMessageClr2Java();
+					  }
+
+					  ContextMessageClr2Java::!ContextMessageClr2Java() {
+						  JNIEnv *env = RetrieveEnv(_jvm);
+						  if (_jobjectContextMessage != NULL) {
+							  env->DeleteGlobalRef(_jobjectContextMessage);
+						  }
+
+						  if (_jstringId != NULL) {
+							  env->DeleteGlobalRef(_jstringId);
+						  }
+
+						  if (_jstringSourceId != NULL) {
+							  env->DeleteGlobalRef(_jstringSourceId);
+						  }
+
+						  if (_jarrayMessage != NULL) {
+							  env->DeleteGlobalRef(_jarrayMessage);
+						  }
+					  }
+
 					  String^ ContextMessageClr2Java::GetId() {
 						  ManagedLog::LOGGER->Log("ContextMessageClr2Java::GetId");
 						  JNIEnv *env = RetrieveEnv(_jvm);

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/DriverRestartCompletedClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/DriverRestartCompletedClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/DriverRestartCompletedClr2Java.cpp
index 1e9a521..2c04456 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/DriverRestartCompletedClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/DriverRestartCompletedClr2Java.cpp
@@ -47,6 +47,17 @@ namespace Org {
 							ManagedLog::LOGGER->LogStop("DriverRestartCompletedClr2Java::DriverRestartCompletedClr2Java");
 						}
 
+						DriverRestartCompletedClr2Java::~DriverRestartCompletedClr2Java() {
+							this->!DriverRestartCompletedClr2Java();
+						}
+
+						DriverRestartCompletedClr2Java::!DriverRestartCompletedClr2Java() {
+							if (_jobjectDriverRestartCompleted != NULL) {
+								JNIEnv *env = RetrieveEnv(_jvm);
+								env->DeleteGlobalRef(_jobjectDriverRestartCompleted);
+							}
+						}
+
 						bool DriverRestartCompletedClr2Java::IsTimedOut() {
 							return _isTimedOut;
 						}

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/DriverRestartedClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/DriverRestartedClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/DriverRestartedClr2Java.cpp
index efb30d9..e6ab41b 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/DriverRestartedClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/DriverRestartedClr2Java.cpp
@@ -52,9 +52,22 @@ namespace Org {
 								_expectedEvaluatorIds[i] = ManagedStringFromJavaString(env, string);
 							}
 
+							env->DeleteGlobalRef(jevaluatorIds);
+
 							ManagedLog::LOGGER->LogStop("DriverRestartedClr2Java::DriverRestartedClr2Java");
 						}
 
+						DriverRestartedClr2Java::~DriverRestartedClr2Java() {
+							this->!DriverRestartedClr2Java();
+						}
+
+						DriverRestartedClr2Java::!DriverRestartedClr2Java() {
+							if (_jobjectDriverRestarted != NULL) {
+								JNIEnv *env = RetrieveEnv(_jvm);
+								env->DeleteGlobalRef(_jobjectDriverRestarted);
+							}
+						}
+
 						array<String^>^ DriverRestartedClr2Java::GetExpectedEvaluatorIds() {
 							return _expectedEvaluatorIds;
 						}

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/EvaluatorRequestorClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/EvaluatorRequestorClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/EvaluatorRequestorClr2Java.cpp
index 2daed9e..45ad8ea 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/EvaluatorRequestorClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/EvaluatorRequestorClr2Java.cpp
@@ -39,6 +39,17 @@ namespace Org {
 						  ManagedLog::LOGGER->LogStop("EvaluatorRequestorClr2Java::EvaluatorRequestorClr2Java");
 					  }
 
+					  EvaluatorRequestorClr2Java::~EvaluatorRequestorClr2Java() {
+						  this->!EvaluatorRequestorClr2Java();
+					  }
+
+					  EvaluatorRequestorClr2Java::!EvaluatorRequestorClr2Java() {
+						  if (_jobjectEvaluatorRequestor != NULL) {
+							  JNIEnv *env = RetrieveEnv(_jvm);
+							  env->DeleteGlobalRef(_jobjectEvaluatorRequestor);
+						  }
+					  }
+
 					  void EvaluatorRequestorClr2Java::Submit(IEvaluatorRequest^ request) {
 						  ManagedLog::LOGGER->LogStart("EvaluatorRequestorClr2Java::Submit");
 						  JNIEnv *env = RetrieveEnv(_jvm);

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/FailedContextClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/FailedContextClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/FailedContextClr2Java.cpp
index 9b26bbb..1913507 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/FailedContextClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/FailedContextClr2Java.cpp
@@ -47,6 +47,29 @@ namespace Org {
 						  ManagedLog::LOGGER->LogStop("FailedContextClr2Java::FailedContextClr2Java");
 					  }
 
+					  FailedContextClr2Java::~FailedContextClr2Java() {
+						  this->!FailedContextClr2Java();
+					  }
+
+					  FailedContextClr2Java::!FailedContextClr2Java() {
+						  JNIEnv *env = RetrieveEnv(_jvm);
+						  if (_jobjectFailedContext != NULL) {
+							  env->DeleteGlobalRef(_jobjectFailedContext);
+						  }
+
+						  if (_jstringContextId != NULL) {
+							  env->DeleteGlobalRef(_jstringContextId);
+						  }
+
+						  if (_jstringEvaluatorId != NULL) {
+							  env->DeleteGlobalRef(_jstringEvaluatorId);
+						  }
+
+						  if (_jstringParentContextId != NULL) {
+							  env->DeleteGlobalRef(_jstringParentContextId);
+						  }
+					  }
+
 					  IActiveContextClr2Java^ FailedContextClr2Java::GetParentContext() {
 						  ManagedLog::LOGGER->LogStart("FailedContextClr2Java::GetParentContext");
 

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/FailedEvaluatorClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/FailedEvaluatorClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/FailedEvaluatorClr2Java.cpp
index afccbbe..7f13d5d 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/FailedEvaluatorClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/FailedEvaluatorClr2Java.cpp
@@ -44,6 +44,21 @@ namespace Org {
 						  ManagedLog::LOGGER->LogStop("FailedEvaluatorClr2Java::FailedEvaluatorClr2Java");
 					  }
 
+					  FailedEvaluatorClr2Java::~FailedEvaluatorClr2Java() {
+						  this->!FailedEvaluatorClr2Java();
+					  }
+
+					  FailedEvaluatorClr2Java::!FailedEvaluatorClr2Java() {
+						  JNIEnv *env = RetrieveEnv(_jvm);
+						  if (_jobjectFailedEvaluator != NULL) {
+							  env->DeleteGlobalRef(_jobjectFailedEvaluator);
+						  }
+
+						  if (_jstringId != NULL) {
+							  env->DeleteGlobalRef(_jstringId);
+						  }
+					  }
+
 					  IEvaluatorRequestorClr2Java^ FailedEvaluatorClr2Java::GetEvaluatorRequestor() {
 						  ManagedLog::LOGGER->LogStart("FailedEvaluatorClr2Java::GetEvaluatorRequestor");
 						  JNIEnv *env = RetrieveEnv(_jvm);

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/FailedTaskClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/FailedTaskClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/FailedTaskClr2Java.cpp
index b6e2be2..de702b7 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/FailedTaskClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/FailedTaskClr2Java.cpp
@@ -39,6 +39,17 @@ namespace Org {
 						  ManagedLog::LOGGER->LogStop("FailedTaskClr2Java::AllocatedEvaluatorClr2Java");
 					  }
 
+					  FailedTaskClr2Java::~FailedTaskClr2Java() {
+						  this->!FailedTaskClr2Java();
+					  }
+
+					  FailedTaskClr2Java::!FailedTaskClr2Java() {
+						  if (_jobjectFailedTask != NULL) {
+							  JNIEnv *env = RetrieveEnv(_jvm);
+							  env->DeleteGlobalRef(_jobjectFailedTask);
+						  }
+					  }
+
 					  IActiveContextClr2Java^ FailedTaskClr2Java::GetActiveContext() {
 						  ManagedLog::LOGGER->LogStart("FailedTaskClr2Java::GetActiveContext");
 

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/HttpServerClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/HttpServerClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/HttpServerClr2Java.cpp
index f8a819d..76e167c 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/HttpServerClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/HttpServerClr2Java.cpp
@@ -39,6 +39,17 @@ namespace Org {
 						  ManagedLog::LOGGER->LogStop("HttpServerClr2Java::HttpServerClr2Java");
 					  }
 
+					  HttpServerClr2Java::~HttpServerClr2Java() {
+						  this->!HttpServerClr2Java();
+					  }
+
+					  HttpServerClr2Java::!HttpServerClr2Java() {
+						  if (_jhttpServerEventBridge != NULL) {
+							  JNIEnv *env = RetrieveEnv(_jvm);
+							  env->DeleteGlobalRef(_jhttpServerEventBridge); 
+						  }
+					  }
+
 					  String^ HttpServerClr2Java::GetQueryString() {
 						  ManagedLog::LOGGER->LogStart("HttpServerClr2Java::GetQueryString");
 						  JNIEnv *env = RetrieveEnv(_jvm);

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/RunningTaskClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/RunningTaskClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/RunningTaskClr2Java.cpp
index 362715b..eda80b0 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/RunningTaskClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/RunningTaskClr2Java.cpp
@@ -42,6 +42,21 @@ namespace Org {
 						  ManagedLog::LOGGER->LogStop("RunningTaskClr2Java::RunningTaskClr2Java");
 					  }
 
+					  RunningTaskClr2Java::~RunningTaskClr2Java() {
+						  this->!RunningTaskClr2Java();
+					  }
+
+					  RunningTaskClr2Java::!RunningTaskClr2Java() {
+						  JNIEnv *env = RetrieveEnv(_jvm);
+						  if (_jobjectRunningTask != NULL) {
+							  env->DeleteGlobalRef(_jobjectRunningTask);
+						  }
+
+						  if (_jstringId != NULL) {
+							  env->DeleteGlobalRef(_jstringId);
+						  }
+					  }
+
 					  IActiveContextClr2Java^ RunningTaskClr2Java::GetActiveContext() {
 						  ManagedLog::LOGGER->LogStart("RunningTaskClr2Java::GetActiveContext");
 

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/SuspendedTaskClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/SuspendedTaskClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/SuspendedTaskClr2Java.cpp
index 059b594..2684028 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/SuspendedTaskClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/SuspendedTaskClr2Java.cpp
@@ -42,6 +42,21 @@ namespace Org {
 						  ManagedLog::LOGGER->LogStop("SuspendedTaskClr2Java::SuspendedTaskClr2Java");
 					  }
 
+					  SuspendedTaskClr2Java::~SuspendedTaskClr2Java() {
+						  this->!SuspendedTaskClr2Java();
+					  }
+
+					  SuspendedTaskClr2Java::!SuspendedTaskClr2Java() {
+						  JNIEnv *env = RetrieveEnv(_jvm);
+						  if (_jobjectSuspendedTask != NULL) {
+							  env->DeleteGlobalRef(_jobjectSuspendedTask);
+						  }
+
+						  if (_jstringId != NULL) {
+							  env->DeleteGlobalRef(_jstringId);
+						  }
+					  }
+
 					  IActiveContextClr2Java^ SuspendedTaskClr2Java::GetActiveContext() {
 						  ManagedLog::LOGGER->LogStart("SuspendedTaskClr2Java::GetActiveContext");
 						  JNIEnv *env = RetrieveEnv(_jvm);

http://git-wip-us.apache.org/repos/asf/reef/blob/9bf54945/lang/cs/Org.Apache.REEF.Bridge/TaskMessageClr2Java.cpp
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Bridge/TaskMessageClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/TaskMessageClr2Java.cpp
index 1fa3cec..a4eca1a 100644
--- a/lang/cs/Org.Apache.REEF.Bridge/TaskMessageClr2Java.cpp
+++ b/lang/cs/Org.Apache.REEF.Bridge/TaskMessageClr2Java.cpp
@@ -42,6 +42,21 @@ namespace Org {
 						  ManagedLog::LOGGER->LogStop("TaskMessageClr2Java::TaskMessageClr2Java");
 					  }
 
+					  TaskMessageClr2Java::~TaskMessageClr2Java() {
+						  this->!TaskMessageClr2Java();
+					  }
+
+					  TaskMessageClr2Java::!TaskMessageClr2Java() {
+						  JNIEnv *env = RetrieveEnv(_jvm);
+						  if (_jobjectTaskMessage != NULL) {
+							  env->DeleteGlobalRef(_jobjectTaskMessage);
+						  }
+
+						  if (_jstringId != NULL) {
+							  env->DeleteGlobalRef(_jstringId);
+						  }
+					  }
+
 					  void TaskMessageClr2Java::OnError(String^ message) {
 						  ManagedLog::LOGGER->Log("TaskMessageClr2Java::OnError");
 						  JNIEnv *env = RetrieveEnv(_jvm);