[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