|
|
|
Mladen Turk-3
|
Author: mturk
Date: Thu Jul 2 15:08:02 2009 New Revision: 790616 URL: http://svn.apache.org/viewvc?rev=790616&view=rev Log: Add DirectBuffer classes Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer.java (with props) commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer32.java (with props) commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer64.java (with props) Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c commons/sandbox/runtime/trunk/src/main/native/test/testcase.c commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer.java?rev=790616&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer.java (added) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer.java Thu Jul 2 15:08:02 2009 @@ -0,0 +1,45 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.runtime; + +import org.apache.commons.runtime.util.Utils; + +/** + * Represents the {@code Pointer} as buffer. + * + * @since Runtime 1.0 + */ +public interface DirectBuffer { + + /** + * Cast {@code this} buffer to {@link Pointer Pointer}. + * + * @return Pointer + */ + public Pointer asPointer(); + + /** + * Free the allocated resource by the Operating system. + * + * @see Pointer#free() + * @throws Throwable the {@code Exception} raised by this method. + */ + public void free() + throws Throwable; + +} + Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer32.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer32.java?rev=790616&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer32.java (added) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer32.java Thu Jul 2 15:08:02 2009 @@ -0,0 +1,49 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.runtime; + +import org.apache.commons.runtime.util.Utils; + +/** Represents the Operating System 32-bit pointer C/C++ pointer. + * <p> + * <b>Warning:</b><br/>Using this class improperly may crash the running JVM. + * </p> + * @since Runtime 1.0 + */ +class DirectBuffer32 extends Pointer32 implements DirectBuffer { + + protected DirectBuffer32() + { + } + + /* + * Only created from JNI code. + */ + private DirectBuffer32(int ptr, int clr, int len) + { + POINTER = ptr; + CLEANUP = clr; + PLENGTH = len; + } + + public Pointer asPointer() + { + return this; + } + +} + Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer32.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer64.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer64.java?rev=790616&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer64.java (added) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer64.java Thu Jul 2 15:08:02 2009 @@ -0,0 +1,49 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.runtime; + +import org.apache.commons.runtime.util.Utils; + +/** Represents the Operating System 64-bit pointer C/C++ pointer. + * <p> + * <b>Warning:</b><br/>Using this class improperly may crash the running JVM. + * </p> + * @since Runtime 1.0 + */ +class DirectBuffer64 extends Pointer64 implements DirectBuffer { + + protected DirectBuffer64() + { + } + + /* + * Only created from JNI code. + */ + private DirectBuffer64(long ptr, long clr, long len) + { + POINTER = ptr; + CLEANUP = clr; + PLENGTH = len; + } + + public Pointer asPointer() + { + return this; + } + +} + Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/DirectBuffer64.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java?rev=790616&r1=790615&r2=790616&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java Thu Jul 2 15:08:02 2009 @@ -26,7 +26,7 @@ */ class Pointer32 extends Pointer { - private int CLEANUP; + protected int CLEANUP; protected int POINTER; protected int PLENGTH; Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java?rev=790616&r1=790615&r2=790616&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java Thu Jul 2 15:08:02 2009 @@ -26,7 +26,7 @@ */ class Pointer64 extends Pointer { - private long CLEANUP; + protected long CLEANUP; protected long POINTER; protected long PLENGTH; Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h?rev=790616&r1=790615&r2=790616&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h (original) +++ commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h Thu Jul 2 15:08:02 2009 @@ -84,6 +84,16 @@ ACR_DECLARE(int) ACR_PointerSet(JNIEnv *env, jobject ptr, void *val, size_t len); +/** + * Create new DirectBuffer class instance + * @param env Current JNI environment + * @param p Native pointer to wrap into Pointer class + * @param len Length of the pointer. + * @param cb callback function to use on Pointer.finalize() + */ +ACR_DECLARE(jobject) ACR_DirectBufferCreate(JNIEnv *_E, void *p, size_t len, + acr_pointer_cleanup_fn_t *cb); + #ifdef __cplusplus } #endif Modified: commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c?rev=790616&r1=790615&r2=790616&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c Thu Jul 2 15:08:02 2009 @@ -372,6 +372,7 @@ /* Forward class loading declarations */ ACR_CLASS_LDEC(Descriptor); ACR_CLASS_LDEC(Pointer); +ACR_CLASS_LDEC(DirectBuffer); ACR_CLASS_LDEC(MbString); ACR_CLASS_LDEC(Group); ACR_CLASS_LDEC(User); @@ -382,6 +383,7 @@ ACR_CLASS_LRUN(Descriptor); ACR_CLASS_LRUN(Pointer); + ACR_CLASS_LRUN(DirectBuffer); ACR_CLASS_LRUN(MbString); ACR_CLASS_LRUN(Group); ACR_CLASS_LRUN(User); @@ -398,6 +400,7 @@ ACR_CLASS_URUN(Descriptor); ACR_CLASS_URUN(Pointer); + ACR_CLASS_URUN(DirectBuffer); ACR_CLASS_URUN(MbString); ACR_CLASS_URUN(Group); ACR_CLASS_URUN(User); 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=790616&r1=790615&r2=790616&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/test/testcase.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/test/testcase.c Thu Jul 2 15:08:02 2009 @@ -220,12 +220,25 @@ return 0; } +static int dbbcallback(void *p, size_t s) +{ + fprintf(stderr, "[native] DirectBuffer callback called: %p - %d\n", p, s); + fflush(stderr); + return 0; +} + ACR_JNI_EXPORT_DECLARE(jobject, TestPrivate, test017)(ACR_JNISTDARGS, jint d) { return ACR_PointerCreate(_E, I2P(d, void *), 0, callback); } +ACR_JNI_EXPORT_DECLARE(jobject, TestPrivate, test038)(ACR_JNISTDARGS, jint d) +{ + + return ACR_DirectBufferCreate(_E, I2P(d, void *), 0, dbbcallback); +} + ACR_JNI_EXPORT_DECLARE(jint, TestPrivate, test018)(ACR_JNISTDARGS, jobject p) { 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=790616&r1=790615&r2=790616&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 Thu Jul 2 15:08:02 2009 @@ -63,6 +63,7 @@ // Pointer private static native int test016(int d); private static native Pointer test017(int d); + private static native DirectBuffer test038(int d); private static native int test018(Pointer p); private static native int test019(Pointer p); @@ -296,6 +297,19 @@ Thread.sleep(200); } + public void testDirectBufferCb() + throws Throwable + { + DirectBuffer b = test038(0xcafebabe); + assertNotNull("DirectBuffer", b); + b.free(); + b = null; + System.gc(); + // This should be enough for a gc + // from Pointer.finalize() + Thread.sleep(200); + } + public void testPointerGc() throws Throwable { @@ -616,11 +630,11 @@ assertNotNull("Descriptor", d); assertEquals("Type", DescriptorType.SOCKET, d.getType()); d.close(); - int r = test037(d, 1964, 0xcafebabe); + int r = test037(d, 1964, 0xcafebabe); assertEquals("Fd", d.fd(), 1964); assertEquals("Type", DescriptorType.FILE, d.getType()); - d.close(); - d = null; + d.close(); + d = null; System.gc(); // This should be enough for a gc // from Pointer.finalize() |
||||||||||||||||
| Free Embeddable Forum Powered by Nabble | Help |