[jboss-cvs] JBoss Messaging SVN: r5105 - in trunk: native/src and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Oct 13 12:49:36 EDT 2008


Author: clebert.suconic at jboss.com
Date: 2008-10-13 12:49:35 -0400 (Mon, 13 Oct 2008)
New Revision: 5105

Modified:
   trunk/native/bin/libJBMLibAIO64.so
   trunk/native/src/AsyncFile.cpp
   trunk/native/src/CallbackAdapter.h
   trunk/native/src/JNICallbackAdapter.cpp
   trunk/native/src/JNICallbackAdapter.h
   trunk/native/src/Version.h
   trunk/src/main/org/jboss/messaging/core/asyncio/impl/AsynchronousFileImpl.java
Log:
Fixing possible memory-leak on the native layer when disk failures are happening

Modified: trunk/native/bin/libJBMLibAIO64.so
===================================================================
(Binary files differ)

Modified: trunk/native/src/AsyncFile.cpp
===================================================================
--- trunk/native/src/AsyncFile.cpp	2008-10-13 15:26:36 UTC (rev 5104)
+++ trunk/native/src/AsyncFile.cpp	2008-10-13 16:49:35 UTC (rev 5105)
@@ -166,8 +166,7 @@
 				}
 				else
 				{
-					adapter->completeBlock(threadContext);
-					adapter->deleteRef(threadContext);
+					adapter->done(threadContext);
 				}
 			}
 			

Modified: trunk/native/src/CallbackAdapter.h
===================================================================
--- trunk/native/src/CallbackAdapter.h	2008-10-13 15:26:36 UTC (rev 5104)
+++ trunk/native/src/CallbackAdapter.h	2008-10-13 16:49:35 UTC (rev 5105)
@@ -27,12 +27,9 @@
 class CallbackAdapter
 {
 private:
-    // The number of pages that are expected to be used by this Buffer
-    int blocks;
 
-    virtual void destroy(THREAD_CONTEXT threadContext) = 0;
 public:
-	CallbackAdapter() : blocks(1)
+	CallbackAdapter()
 	{
 		
 	}
@@ -41,28 +38,6 @@
 		
 	}
 	
-	void setBlocks(int _blocks)
-	{
-		blocks = _blocks;
-	}
-	
-	void addBlock()
-	{
-		// TODO: Do I need to mutex here?
-		blocks++;
-	}
-	
-	void completeBlock(THREAD_CONTEXT threadContext)
-	{
-		// TODO: Do I need to mutex here?
-		if (--blocks <= 0)
-		{
-			done(threadContext);
-		}
-	}
-	
-	virtual void addref(THREAD_CONTEXT ) = 0;
-	virtual void deleteRef(THREAD_CONTEXT ) = 0;
 	virtual void done(THREAD_CONTEXT ) = 0;
 	virtual void onError(THREAD_CONTEXT , long , std::string )=0;
 };

Modified: trunk/native/src/JNICallbackAdapter.cpp
===================================================================
--- trunk/native/src/JNICallbackAdapter.cpp	2008-10-13 15:26:36 UTC (rev 5104)
+++ trunk/native/src/JNICallbackAdapter.cpp	2008-10-13 16:49:35 UTC (rev 5105)
@@ -22,7 +22,7 @@
 #include <iostream>
 #include "JavaUtilities.h"
 
-JNICallbackAdapter::JNICallbackAdapter(AIOController * _controller, jobject _callback, jobject _fileController, jobject _bufferReference) : CallbackAdapter(), refs(1)
+JNICallbackAdapter::JNICallbackAdapter(AIOController * _controller, jobject _callback, jobject _fileController, jobject _bufferReference) : CallbackAdapter()
 {
 	controller = _controller;
 	callback = _callback;
@@ -37,7 +37,7 @@
 void JNICallbackAdapter::done(THREAD_CONTEXT threadContext)
 {
 	JNI_ENV(threadContext)->CallVoidMethod(fileController, controller->done, callback, bufferReference); 
-	return;
+	release(threadContext);
 }
 
 void JNICallbackAdapter::onError(THREAD_CONTEXT threadContext, long errorCode, std::string error)
@@ -45,11 +45,6 @@
 	controller->log(threadContext, 0, "Libaio event generated errors, callback object was informed about it");
 	jstring strError = JNI_ENV(threadContext)->NewStringUTF(error.data());
 	JNI_ENV(threadContext)->CallVoidMethod(fileController, controller->error, callback, (jint)errorCode, strError);
+	release(threadContext);
 }
 
-void JNICallbackAdapter::destroy(THREAD_CONTEXT threadContext)
-{
-	JNI_ENV(threadContext)->DeleteGlobalRef(callback);
-	JNI_ENV(threadContext)->DeleteGlobalRef(fileController);
-	JNI_ENV(threadContext)->DeleteGlobalRef(bufferReference);
-}

Modified: trunk/native/src/JNICallbackAdapter.h
===================================================================
--- trunk/native/src/JNICallbackAdapter.h	2008-10-13 15:26:36 UTC (rev 5104)
+++ trunk/native/src/JNICallbackAdapter.h	2008-10-13 16:49:35 UTC (rev 5105)
@@ -34,32 +34,26 @@
 	jobject callback;
 	jobject fileController;
 	jobject bufferReference;
-	int refs;
-    void destroy(THREAD_CONTEXT threadContext);
+
+	void release(THREAD_CONTEXT threadContext)
+	{
+		JNI_ENV(threadContext)->DeleteGlobalRef(callback);
+		JNI_ENV(threadContext)->DeleteGlobalRef(fileController);
+		JNI_ENV(threadContext)->DeleteGlobalRef(bufferReference);
+		delete this;
+		return;
+	}
 	
+	
 public:
 	// _ob must be a global Reference (use createGloblReferente before calling the constructor)
 	JNICallbackAdapter(AIOController * _controller, jobject _callback, jobject _fileController, jobject _bufferReference);
 	virtual ~JNICallbackAdapter();
+
 	void done(THREAD_CONTEXT threadContext);
+
 	void onError(THREAD_CONTEXT , long , std::string );
+
 	
-	void addref(THREAD_CONTEXT )
-	{
-		// As long as there is only one thread polling events, we are safe with this
-		refs++;
-	}
-	
-	void deleteRef(THREAD_CONTEXT threadContext)
-	{
-		// As long as there is only one thread polling events, we are safe with this
-		if (--refs <= 0)
-		{
-			destroy(threadContext);
-			delete this;
-		}
-	}
-	
-	
 };
 #endif /*JNIBUFFERADAPTER_H_*/

Modified: trunk/native/src/Version.h
===================================================================
--- trunk/native/src/Version.h	2008-10-13 15:26:36 UTC (rev 5104)
+++ trunk/native/src/Version.h	2008-10-13 16:49:35 UTC (rev 5105)
@@ -1,5 +1,5 @@
 
 #ifndef _VERSION_NATIVE_AIO
-#define _VERSION_NATIVE_AIO 14
+#define _VERSION_NATIVE_AIO 15
 #endif
 

Modified: trunk/src/main/org/jboss/messaging/core/asyncio/impl/AsynchronousFileImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/asyncio/impl/AsynchronousFileImpl.java	2008-10-13 15:26:36 UTC (rev 5104)
+++ trunk/src/main/org/jboss/messaging/core/asyncio/impl/AsynchronousFileImpl.java	2008-10-13 16:49:35 UTC (rev 5105)
@@ -53,7 +53,7 @@
 
    private static boolean loaded = false;
 
-   private static int EXPECTED_NATIVE_VERSION = 14;
+   private static int EXPECTED_NATIVE_VERSION = 15;
 
    static void addMax(final int io)
    {
@@ -84,6 +84,7 @@
       }
       catch (Throwable e)
       {
+         e.printStackTrace();
          log.trace(name + " -> error loading the native library", e);
          return false;
       }




More information about the jboss-cvs-commits mailing list