Index: vmcore/src/kernel_classes/native/org_apache_harmony_util_concurrent_Atomics.h =================================================================== --- vmcore/src/kernel_classes/native/org_apache_harmony_util_concurrent_Atomics.h (revision 448887) +++ vmcore/src/kernel_classes/native/org_apache_harmony_util_concurrent_Atomics.h (working copy) @@ -41,6 +41,18 @@ /* Native methods */ /* + * Method: org.apache.harmony.util.concurrent.Atomics.arrayBaseOffset(Ljava/lang/Class;)I + */ +JNIEXPORT jint JNICALL Java_org_apache_harmony_util_concurrent_Atomics_arrayBaseOffset + (JNIEnv *, jclass, jclass); + +/* + * Method: org.apache.harmony.util.concurrent.Atomics.arrayIndexScale(Ljava/lang/Class;)I + */ +JNIEXPORT jint JNICALL Java_org_apache_harmony_util_concurrent_Atomics_arrayIndexScale + (JNIEnv *, jclass, jclass); + +/* * Method: org.apache.harmony.util.concurrent.Atomics.setIntVolatile(Ljava/lang/Object;JI)V */ JNIEXPORT void JNICALL Index: vmcore/src/kernel_classes/native/org_apache_harmony_util_concurrent_Atomics.cpp =================================================================== --- vmcore/src/kernel_classes/native/org_apache_harmony_util_concurrent_Atomics.cpp (revision 448887) +++ vmcore/src/kernel_classes/native/org_apache_harmony_util_concurrent_Atomics.cpp (working copy) @@ -23,7 +23,24 @@ #include "atomics.h" #include "org_apache_harmony_util_concurrent_Atomics.h" +JNIEXPORT jint JNICALL Java_org_apache_harmony_util_concurrent_Atomics_arrayBaseOffset + (JNIEnv * env, jclass self, jclass array) +{ + jlong array_element_size = Java_org_apache_harmony_util_concurrent_Atomics_arrayIndexScale(env, self, array); + if(array_element_size < 8) { + return VM_VECTOR_FIRST_ELEM_OFFSET_1_2_4; + } else { + return VM_VECTOR_FIRST_ELEM_OFFSET_8; + } +} +JNIEXPORT jint JNICALL Java_org_apache_harmony_util_concurrent_Atomics_arrayIndexScale + (JNIEnv * env, jclass self, jclass array) +{ + Class * clz = jclass_to_struct_Class(array); + return clz->array_element_size; +} + JNIEXPORT void JNICALL Java_org_apache_harmony_util_concurrent_Atomics_setIntVolatile__Ljava_lang_Object_2JI(JNIEnv * env, jclass self, jobject obj, jlong offset, jint value) Index: vmcore/src/kernel_classes/javasrc/java/util/concurrent/locks/LockSupport.java =================================================================== --- vmcore/src/kernel_classes/javasrc/java/util/concurrent/locks/LockSupport.java (revision 0) +++ vmcore/src/kernel_classes/javasrc/java/util/concurrent/locks/LockSupport.java (revision 0) @@ -0,0 +1,28 @@ +/* + * Copyright 2005-2006 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed 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 java.util.concurrent.locks; + +public class LockSupport { + + public static native void unpark(Thread thread); + + public static native void park(); + + public static native void parkNanos(long nanos); + + public static native void parkUntil(long deadline); +} + Property changes on: vmcore/src/kernel_classes/javasrc/java/util/concurrent/locks/LockSupport.java ___________________________________________________________________ Name: svn:executable + * Index: vmcore/src/kernel_classes/javasrc/sun/misc/Unsafe.java =================================================================== --- vmcore/src/kernel_classes/javasrc/sun/misc/Unsafe.java (revision 448887) +++ vmcore/src/kernel_classes/javasrc/sun/misc/Unsafe.java (working copy) @@ -116,7 +116,7 @@ * @return The base offset value. */ public int arrayBaseOffset(Class clazz) { - throw new UnsupportedOperationException("Not Yet Implemented"); + return Atomics.arrayBaseOffset(clazz); } /** @@ -149,7 +149,7 @@ * @return The index scale value. */ public int arrayIndexScale(Class clazz) { - throw new UnsupportedOperationException("Not Yet Implemented"); + return Atomics.arrayIndexScale(clazz); } /** @@ -271,6 +271,7 @@ */ public void unpark(Thread thread) { throw new UnsupportedOperationException("Not Yet Implemented"); + //LockSupport.unpark(thread); } /** @@ -292,5 +293,10 @@ */ public void park(boolean timestamp, long nanosOrTimestamp) { throw new UnsupportedOperationException("Not Yet Implemented"); + /*if (timestamp) { + LockSupport.parkUntil(nanosOrTimestamp); + } else { + LockSupport.parkNanos(nanosOrTimestamp); + }*/ } } Index: vmcore/src/kernel_classes/javasrc/org/apache/harmony/util/concurrent/Atomics.java =================================================================== --- vmcore/src/kernel_classes/javasrc/org/apache/harmony/util/concurrent/Atomics.java (revision 448887) +++ vmcore/src/kernel_classes/javasrc/org/apache/harmony/util/concurrent/Atomics.java (working copy) @@ -32,6 +32,22 @@ private Atomics() {}; + /** + * Returns offset of the first array's element + * @param arrayClass class of the array + * + * @return offset of the array's first element + */ + public static native int arrayBaseOffset(Class arrayClass); + + /** + * Returns size of the array's element + * @param arrayClass class of the array + * + * @return size of the array's element + */ + public static native int arrayIndexScale(Class arrayClass); + /* * Writes new value to the object's field (by given offset) in volatile manner * @param obj object which field needs to be set