You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/07/01 22:13:11 UTC
svn commit: r790357 - in /commons/sandbox/runtime/trunk/src:
main/java/org/apache/commons/runtime/ main/native/include/
main/native/shared/ main/native/test/ test/org/apache/commons/runtime/
Author: mturk
Date: Wed Jul 1 20:13:11 2009
New Revision: 790357
URL: http://svn.apache.org/viewvc?rev=790357&view=rev
Log:
Add descriptor attach for reusing Descriptor objects
Modified:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java
commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h
commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c
commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java?rev=790357&r1=790356&r2=790357&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java Wed Jul 1 20:13:11 2009
@@ -79,6 +79,7 @@
{
IERRNUM = 0;
IDFLAGS = v;
+ CONTEXT = null;
}
private native void close0()
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h?rev=790357&r1=790356&r2=790357&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h Wed Jul 1 20:13:11 2009
@@ -69,12 +69,24 @@
* @param i Native integer descriptor to wrap into Descriptor class
* @param p Native pointer descriptor to wrap into Descriptor class
* @param cb handler function to use
- * @param ho handler function to use
*/
ACR_DECLARE(jobject) ACR_DescriptorCreate(JNIEnv *env, int f, int i, void *p,
acr_descriptor_handler_fn_t *cb);
/**
+ * Attach native descriptor to existing Descriptor object
+ * @param env Current JNI environment
+ * @param obj Existing descriptor object
+ * @param f Descriptor flags.
+ * @param i Native integer descriptor to wrap into Descriptor class
+ * @param p Native pointer descriptor to wrap into Descriptor class
+ * @param cb handler function to use
+ */
+ACR_DECLARE(int) ACR_DescriptorAttach(JNIEnv *env, jobject obj,
+ int f, int i, void *p,
+ acr_descriptor_handler_fn_t *cb);
+
+/**
* Create new Descriptor array
* @param env Current JNI environment
* @param len Size of the new Descriptor array
@@ -171,3 +183,4 @@
#endif
#endif /* _ACR_DESCRIPTOR_H */
+
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c?rev=790357&r1=790356&r2=790357&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c Wed Jul 1 20:13:11 2009
@@ -229,6 +229,30 @@
}
}
+ACR_DECLARE(int) ACR_DescriptorAttach(JNIEnv *_E, jobject dp,
+ int f, int i, void *p,
+ acr_descriptor_handler_fn_t *c)
+{
+ if (_clazzn.i && J4MID(0000)) {
+ if ((*_E)->MonitorEnter(_E, dp)) {
+ /* Object locking failed */
+ return ACR_ENOLOCK;
+ }
+ SET_IFIELD_I(0000, dp, i);
+ SET_IFIELD_P(0001, dp, p);
+ SET_IFIELD_P(0002, dp, c);
+ SET_IFIELD_P(0003, dp, 0);
+ SET_IFIELD_P(0004, dp, f);
+ SET_IFIELD_O(0005, dp, NULL);
+
+ (*_E)->MonitorExit(_E, dp);
+ return ACR_SUCCESS;
+ }
+ else {
+ return ACR_ECLASSNOTFOUND;
+ }
+}
+
ACR_DECLARE(int) ACR_DescriptorCleanup(ACR_JNISTDARGS)
{
if (_clazzn.i && J4MID(0000)) {
Modified: commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/test/testcase.c?rev=790357&r1=790356&r2=790357&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/test/testcase.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/test/testcase.c Wed Jul 1 20:13:11 2009
@@ -259,6 +259,12 @@
return ACR_DescriptorCreate(_E, ACR_DT_SOCKET, i, I2P(d, void *), dhandler);
}
+ACR_JNI_EXPORT_DECLARE(jint, TestPrivate, test037)(ACR_JNISTDARGS, jobject d, jint i, jint p)
+{
+
+ return ACR_DescriptorAttach(_E, d, ACR_DT_FILE, i, I2P(p, void *), dhandler);
+}
+
ACR_JNI_EXPORT_DECLARE(jint, TestPrivate, test022)(ACR_JNISTDARGS, jobject d)
{
Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java?rev=790357&r1=790356&r2=790357&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java (original)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java Wed Jul 1 20:13:11 2009
@@ -86,6 +86,7 @@
private static native int test034(Descriptor p);
private static native int test035(Class c);
private static native String test036(Class c);
+ private static native int test037(Descriptor d, int i, int p);
private static native String test100(String s);
@@ -584,7 +585,7 @@
{
Descriptor d = test021(2303, 0);
assertNotNull("Descriptor", d);
- assertEquals("Type", d.getType(), DescriptorType.SOCKET);
+ assertEquals("Type", DescriptorType.SOCKET, d.getType());
d.close();
d = null;
System.gc();
@@ -608,6 +609,24 @@
Thread.sleep(200);
}
+ public void testDescriptorAttach()
+ throws Throwable
+ {
+ Descriptor d = test021(2303, 0);
+ assertNotNull("Descriptor", d);
+ assertEquals("Type", DescriptorType.SOCKET, d.getType());
+ d.close();
+ int r = test037(d, 1964, 0xcafebabe);
+ assertEquals("Fd", d.fd(), 1964);
+ assertEquals("Type", DescriptorType.FILE, d.getType());
+ d.close();
+ d = null;
+ System.gc();
+ // This should be enough for a gc
+ // from Pointer.finalize()
+ Thread.sleep(200);
+ }
+
public void testUtf16String()
throws Throwable
{