Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import com.oracle.svm.core.SubstrateUtil;
import com.oracle.svm.core.annotate.Alias;
import com.oracle.svm.core.annotate.Inject;
import com.oracle.svm.core.annotate.InjectAccessors;
import com.oracle.svm.core.annotate.RecomputeFieldValue;
import com.oracle.svm.core.annotate.RecomputeFieldValue.Kind;
import com.oracle.svm.core.annotate.Substitute;
Expand Down Expand Up @@ -150,6 +151,46 @@ final class Target_java_util_concurrent_ConcurrentHashMap {
@Alias @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.Reset)//
Target_java_util_concurrent_ConcurrentHashMap_EntrySetView entrySet;

@Alias @InjectAccessors(NCPUAccessor.class) //
private static int NCPU;
}

final class NCPUAccessor {
private static int cachedNCPU = -1;

static int get() {
if (cachedNCPU != -1) {
return cachedNCPU;
}
return initializeNCPU();
}

private static synchronized int initializeNCPU() {
if (cachedNCPU != -1) {
return cachedNCPU;
}

cachedNCPU = Runtime.getRuntime().availableProcessors();
return cachedNCPU;
}

static synchronized void set(int value) {
cachedNCPU = value;
}
}

@TargetClass(java.util.concurrent.Phaser.class)
final class Target_java_util_concurrent_Phaser {

@Alias @InjectAccessors(NCPUAccessor.class) //
private static int NCPU;
}

@TargetClass(className = "java.util.concurrent.atomic.Striped64")
final class Target_java_util_concurrent_atomic_Striped64 {

@Alias @InjectAccessors(NCPUAccessor.class) //
private static int NCPU;
}

@TargetClass(value = java.util.concurrent.ConcurrentHashMap.class, innerClass = "KeySetView")
Expand Down Expand Up @@ -289,6 +330,37 @@ public boolean getAsBoolean() {
}
}

@TargetClass(className = "java.util.concurrent.LinkedTransferQueue", innerClass = "DualNode")
final class Target_java_util_concurrent_LinkedTransferQueue_DualNode {

@Alias @InjectAccessors(LinkedTransferQueueDualNodeIsUniprocessorAccessor.class) //
private static boolean isUniprocessor;
}

final class LinkedTransferQueueDualNodeIsUniprocessorAccessor {
private static Boolean cachedIsUniprocessor = null;

static boolean get() {
if (cachedIsUniprocessor != null) {
return cachedIsUniprocessor;
}
return initializeIsUniprocessor();
}

static void set(boolean value) {
cachedIsUniprocessor = value;
}

private static synchronized boolean initializeIsUniprocessor() {
if (cachedIsUniprocessor != null) {
return cachedIsUniprocessor;
}

cachedIsUniprocessor = Runtime.getRuntime().availableProcessors() == 1;
return cachedIsUniprocessor;
}
}

/** Dummy class to have a class with the file's name. */
public final class JavaUtilSubstitutions {
}