Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: cb8013e8d2be
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 68f93a137df2
Choose a head ref
  • 13 commits
  • 30 files changed
  • 1 contributor

Commits on Feb 10, 2016

  1. Copy the full SHA
    79139fb View commit details
  2. Copy the full SHA
    ef9f0e1 View commit details
  3. Copy the full SHA
    4b9d12d View commit details

Commits on Feb 11, 2016

  1. Copy the full SHA
    94d791a View commit details
  2. Copy the full SHA
    4ed6c09 View commit details
  3. Copy the full SHA
    c770706 View commit details
  4. Copy the full SHA
    ed77da3 View commit details
  5. Copy the full SHA
    5320262 View commit details
  6. Copy the full SHA
    648b94e View commit details
  7. Copy the full SHA
    d28b844 View commit details
  8. Copy the full SHA
    83b6b7c View commit details
  9. Copy the full SHA
    ef8c543 View commit details
  10. Copy the full SHA
    68f93a1 View commit details
Showing with 681 additions and 187 deletions.
  1. +24 −41 truffle/src/main/java/org/jruby/truffle/RubyContext.java
  2. +3 −3 truffle/src/main/java/org/jruby/truffle/core/CoreLibrary.java
  3. +4 −5 truffle/src/main/java/org/jruby/truffle/core/ProcessNodes.java
  4. +3 −2 truffle/src/main/java/org/jruby/truffle/{platform/signal → core/proc}/ProcSignalHandler.java
  5. +7 −7 truffle/src/main/java/org/jruby/truffle/core/rubinius/VMPrimitiveNodes.java
  6. +2 −2 truffle/src/main/java/org/jruby/truffle/language/RubyNode.java
  7. +5 −16 truffle/src/main/java/org/jruby/truffle/language/globals/WriteProgramNameNode.java
  8. +4 −2 ...fle/src/main/java/org/jruby/truffle/{core/ffi/LibCClockGetTime.java → platform/ClockGetTime.java}
  9. +29 −0 truffle/src/main/java/org/jruby/truffle/platform/NativePlatform.java
  10. +36 −0 truffle/src/main/java/org/jruby/truffle/platform/NativePlatformFactory.java
  11. +18 −0 truffle/src/main/java/org/jruby/truffle/platform/ProcessName.java
  12. +1 −22 truffle/src/main/java/org/jruby/truffle/platform/RubiniusConfiguration.java
  13. +2 −2 truffle/src/main/java/org/jruby/truffle/{stdlib/sockets/NativeSockets.java → platform/Sockets.java}
  14. +71 −0 truffle/src/main/java/org/jruby/truffle/platform/darwin/DarwinPlatform.java
  15. +37 −0 truffle/src/main/java/org/jruby/truffle/platform/darwin/DarwinProcessName.java
  16. +1 −1 truffle/src/main/java/org/jruby/truffle/platform/{posix → java}/BaseLibC.java
  17. +22 −0 truffle/src/main/java/org/jruby/truffle/platform/java/JavaClockGetTime.java
  18. +1 −1 truffle/src/main/java/org/jruby/truffle/platform/{posix → java}/JavaLibC.java
  19. +71 −0 truffle/src/main/java/org/jruby/truffle/platform/java/JavaPlatform.java
  20. +26 −0 truffle/src/main/java/org/jruby/truffle/platform/java/JavaProcessName.java
  21. +93 −0 truffle/src/main/java/org/jruby/truffle/platform/java/JavaSockets.java
  22. +1 −1 truffle/src/main/java/org/jruby/truffle/platform/{posix → java}/POSIXDelegator.java
  23. +1 −1 truffle/src/main/java/org/jruby/truffle/platform/{posix → java}/TruffleJavaFileStat.java
  24. +1 −1 truffle/src/main/java/org/jruby/truffle/platform/{posix → java}/TruffleJavaPOSIX.java
  25. +71 −0 truffle/src/main/java/org/jruby/truffle/platform/linux/LinuxPlatform.java
  26. +2 −40 truffle/src/main/java/org/jruby/truffle/platform/signal/Signal.java
  27. +40 −0 truffle/src/main/java/org/jruby/truffle/platform/signal/SignalManager.java
  28. +0 −40 truffle/src/main/java/org/jruby/truffle/platform/signal/SignalOperations.java
  29. +26 −0 truffle/src/main/java/org/jruby/truffle/platform/sunmisc/SunMiscSignal.java
  30. +79 −0 truffle/src/main/java/org/jruby/truffle/platform/sunmisc/SunMiscSignalManager.java
65 changes: 24 additions & 41 deletions truffle/src/main/java/org/jruby/truffle/RubyContext.java
Original file line number Diff line number Diff line change
@@ -21,7 +21,6 @@
import com.oracle.truffle.tools.CoverageTracker;
import jnr.ffi.LibraryLoader;
import jnr.posix.POSIX;
import jnr.posix.POSIXFactory;
import org.jcodings.Encoding;
import org.jcodings.specific.UTF8Encoding;
import org.jruby.Ruby;
@@ -35,7 +34,7 @@
import org.jruby.truffle.core.SetTopLevelBindingNode;
import org.jruby.truffle.core.array.ArrayOperations;
import org.jruby.truffle.core.binding.BindingNodes;
import org.jruby.truffle.core.ffi.LibCClockGetTime;
import org.jruby.truffle.platform.ClockGetTime;
import org.jruby.truffle.core.kernel.AtExitManager;
import org.jruby.truffle.core.kernel.TraceManager;
import org.jruby.truffle.core.objectspace.ObjectSpaceManager;
@@ -61,11 +60,9 @@
import org.jruby.truffle.language.objects.ObjectIDOperations;
import org.jruby.truffle.language.translator.TranslatorDriver;
import org.jruby.truffle.language.translator.TranslatorDriver.ParserContext;
import org.jruby.truffle.platform.RubiniusConfiguration;
import org.jruby.truffle.platform.TrufflePOSIXHandler;
import org.jruby.truffle.platform.darwin.CrtExterns;
import org.jruby.truffle.platform.posix.TruffleJavaPOSIX;
import org.jruby.truffle.stdlib.sockets.NativeSockets;
import org.jruby.truffle.platform.*;
import org.jruby.truffle.platform.signal.SignalManager;
import org.jruby.truffle.platform.Sockets;
import org.jruby.truffle.tools.InstrumentationServerManager;
import org.jruby.truffle.tools.callgraph.CallGraph;
import org.jruby.truffle.tools.callgraph.SimpleWriter;
@@ -93,10 +90,7 @@ public class RubyContext extends ExecutionContext {

private final Options options;

private final POSIX posix;
private final NativeSockets nativeSockets;
private final LibCClockGetTime libCClockGetTime;
private CrtExterns crtExterns;
private final NativePlatform nativePlatform;

private final CoreLibrary coreLibrary;
private final FeatureLoader featureLoader;
@@ -115,7 +109,6 @@ public class RubyContext extends ExecutionContext {
private final InstrumentationServerManager instrumentationServerManager;
private final AttachmentsManager attachmentsManager;
private final SourceCache sourceCache;
private final RubiniusConfiguration rubiniusConfiguration;
private final CallGraph callGraph;

private final AtomicLong nextObjectID = new AtomicLong(ObjectIDOperations.FIRST_OBJECT_ID);
@@ -176,32 +169,14 @@ public RubyContext(Ruby runtime, TruffleLanguage.Env env) {

this.runtime = runtime;

if (options.POSIX_USE_JAVA) {
posix = new TruffleJavaPOSIX(this, POSIXFactory.getJavaPOSIX(new TrufflePOSIXHandler(this)));
} else {
posix = POSIXFactory.getNativePOSIX(new TrufflePOSIXHandler(this));
}

nativeSockets = LibraryLoader.create(NativeSockets.class).library("c").load();

try {
crtExterns = LibraryLoader.create(CrtExterns.class).failImmediately().library("libSystem.B.dylib").load();
} catch (UnsatisfiedLinkError e) {
crtExterns = null;
}

if (Platform.getPlatform().getOS() == OS_TYPE.LINUX) {
libCClockGetTime = LibraryLoader.create(LibCClockGetTime.class).library("c").load();
} else {
libCClockGetTime = null;
}

warnings = new Warnings(this);

// Object space manager needs to come early before we create any objects
objectSpaceManager = new ObjectSpaceManager(this);

coreLibrary = new CoreLibrary(this);

nativePlatform = NativePlatformFactory.createPlatform(this);
rootLexicalScope = new LexicalScope(null, coreLibrary.getObjectClass());

org.jruby.Main.printTruffleTimeMetric("before-load-nodes");
@@ -228,7 +203,6 @@ public RubyContext(Ruby runtime, TruffleLanguage.Env env) {

attachmentsManager = new AttachmentsManager(this);
sourceCache = new SourceCache(new SourceLoader(this));
rubiniusConfiguration = RubiniusConfiguration.create(this);

final PrintStream configStandardOut = runtime.getInstanceConfig().getOutput();
debugStandardOut = (configStandardOut == System.out) ? null : configStandardOut;
@@ -603,19 +577,19 @@ public SourceCache getSourceCache() {
}

public RubiniusConfiguration getRubiniusConfiguration() {
return rubiniusConfiguration;
return getNativePlatform().getRubiniusConfiguration();
}

public POSIX getPosix() {
return posix;
return getNativePlatform().getPosix();
}

public NativeSockets getNativeSockets() {
return nativeSockets;
public Sockets getNativeSockets() {
return getNativePlatform().getSockets();
}

public LibCClockGetTime getLibCClockGetTime() {
return libCClockGetTime;
public ClockGetTime getLibCClockGetTime() {
return getNativePlatform().getClockGetTime();
}

public Object execute(final org.jruby.ast.RootNode rootNode) {
@@ -722,8 +696,12 @@ public DynamicObject createHandle(Object object) {
return Layouts.HANDLE.createHandle(coreLibrary.getHandleFactory(), object);
}

public CrtExterns getCrtExterns() {
return crtExterns;
public NativePlatform getNativePlatform() {
return nativePlatform;
}

public ProcessName getProcessName() {
return getNativePlatform().getProcessName();
}

public static void appendToFile(String fileName, String message) {
@@ -737,4 +715,9 @@ public static void appendToFile(String fileName, String message) {
public CallGraph getCallGraph() {
return callGraph;
}

public SignalManager getSignalManager() {
return getNativePlatform().getSignalManager();
}

}
6 changes: 3 additions & 3 deletions truffle/src/main/java/org/jruby/truffle/core/CoreLibrary.java
Original file line number Diff line number Diff line change
@@ -89,7 +89,7 @@
import org.jruby.truffle.language.objects.SingletonClassNode;
import org.jruby.truffle.language.objects.SingletonClassNodeGen;
import org.jruby.truffle.platform.RubiniusTypes;
import org.jruby.truffle.platform.signal.SignalOperations;
import org.jruby.truffle.platform.signal.SignalManager;
import org.jruby.truffle.stdlib.*;
import org.jruby.truffle.stdlib.psych.PsychEmitterNodesFactory;
import org.jruby.truffle.stdlib.psych.PsychParserNodes;
@@ -712,10 +712,10 @@ private void initializeConstants() {
}

private void initializeSignalConstants() {
Object[] signals = new Object[SignalOperations.SIGNALS_LIST.size()];
Object[] signals = new Object[SignalManager.SIGNALS_LIST.size()];

int i = 0;
for (Map.Entry<String, Integer> signal : SignalOperations.SIGNALS_LIST.entrySet()) {
for (Map.Entry<String, Integer> signal : SignalManager.SIGNALS_LIST.entrySet()) {
DynamicObject signalName = StringOperations.createString(context, StringOperations.encodeRope(signal.getKey(), UTF8Encoding.INSTANCE));
Object[] objects = new Object[]{signalName, signal.getValue()};
signals[i++] = Layouts.ARRAY.createArray(Layouts.CLASS.getInstanceFactory(arrayClass), objects, objects.length);
Original file line number Diff line number Diff line change
@@ -19,13 +19,12 @@
import com.oracle.truffle.api.source.SourceSection;
import org.jruby.truffle.RubyContext;
import org.jruby.truffle.core.cast.DefaultValueNodeGen;
import org.jruby.truffle.core.ffi.LibCClockGetTime;
import org.jruby.truffle.platform.ClockGetTime;
import org.jruby.truffle.core.ffi.TimeSpec;
import org.jruby.truffle.language.RubyGuards;
import org.jruby.truffle.language.RubyNode;
import org.jruby.truffle.language.control.RaiseException;
import org.jruby.truffle.platform.signal.Signal;
import org.jruby.truffle.platform.signal.SignalOperations;

@CoreClass(name = "Process")
public abstract class ProcessNodes {
@@ -82,7 +81,7 @@ protected Object clock_gettime_monotonic_raw(int clock_id, DynamicObject unit) {

@TruffleBoundary
private Object clock_gettime_clock_id(int clock_id, DynamicObject unit) {
final LibCClockGetTime libCClockGetTime = getContext().getLibCClockGetTime();
final ClockGetTime libCClockGetTime = getContext().getLibCClockGetTime();
TimeSpec timeSpec = new TimeSpec(jnr.ffi.Runtime.getRuntime(libCClockGetTime));
int r = libCClockGetTime.clock_gettime(clock_id, timeSpec);
if (r != 0) {
@@ -143,9 +142,9 @@ public int kill(DynamicObject signalName, int pid) {

@TruffleBoundary
private int raise(String signalName) {
Signal signal = new Signal(signalName);
Signal signal = getContext().getSignalManager().createSignal(signalName);
try {
SignalOperations.raise(signal);
getContext().getSignalManager().raise(signal);
} catch (IllegalArgumentException e) {
throw new RaiseException(getContext().getCoreLibrary().argumentError(e.getMessage(), this));
}
Original file line number Diff line number Diff line change
@@ -7,14 +7,15 @@
* GNU General Public License version 2
* GNU Lesser General Public License version 2.1
*/
package org.jruby.truffle.platform.signal;
package org.jruby.truffle.core.proc;

import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.object.DynamicObject;
import org.jruby.truffle.RubyContext;
import org.jruby.truffle.core.Layouts;
import org.jruby.truffle.core.proc.ProcNodes;
import org.jruby.truffle.language.RubyGuards;
import org.jruby.truffle.platform.signal.Signal;
import org.jruby.truffle.platform.signal.SignalHandler;
import org.jruby.util.func.Function2;

public class ProcSignalHandler implements SignalHandler {
Original file line number Diff line number Diff line change
@@ -70,10 +70,10 @@
import org.jruby.truffle.language.objects.IsANode;
import org.jruby.truffle.language.objects.IsANodeGen;
import org.jruby.truffle.language.yield.YieldDispatchHeadNode;
import org.jruby.truffle.platform.signal.ProcSignalHandler;
import org.jruby.truffle.core.proc.ProcSignalHandler;
import org.jruby.truffle.platform.signal.Signal;
import org.jruby.truffle.platform.signal.SignalHandler;
import org.jruby.truffle.platform.signal.SignalOperations;
import org.jruby.truffle.platform.signal.SignalManager;
import org.jruby.util.io.PosixShim;

import java.lang.management.ManagementFactory;
@@ -451,7 +451,7 @@ public boolean watchSignal(DynamicObject signalName, DynamicObject action) {

@Specialization(guards = { "isRubyString(signalName)", "isNil(nil)" })
public boolean watchSignal(DynamicObject signalName, Object nil) {
return handle(signalName, SignalOperations.IGNORE_HANDLER);
return handle(signalName, SignalManager.IGNORE_HANDLER);
}

@Specialization(guards = { "isRubyString(signalName)", "isRubyProc(proc)" })
@@ -461,9 +461,9 @@ public boolean watchSignalProc(DynamicObject signalName, DynamicObject proc) {

@TruffleBoundary
private boolean handleDefault(DynamicObject signalName) {
Signal signal = new Signal(signalName.toString());
Signal signal = getContext().getSignalManager().createSignal(signalName.toString());
try {
SignalOperations.watchDefaultForSignal(signal);
getContext().getSignalManager().watchDefaultForSignal(signal);
} catch (IllegalArgumentException e) {
throw new RaiseException(getContext().getCoreLibrary().argumentError(e.getMessage(), this));
}
@@ -472,9 +472,9 @@ private boolean handleDefault(DynamicObject signalName) {

@TruffleBoundary
private boolean handle(DynamicObject signalName, SignalHandler newHandler) {
final Signal signal = new Signal(signalName.toString());
Signal signal = getContext().getSignalManager().createSignal(signalName.toString());
try {
SignalOperations.watchSignal(signal, newHandler);
getContext().getSignalManager().watchSignal(signal, newHandler);
} catch (IllegalArgumentException e) {
throw new RaiseException(getContext().getCoreLibrary().argumentError(e.getMessage(), this));
}
Original file line number Diff line number Diff line change
@@ -26,7 +26,7 @@
import org.jruby.truffle.core.rope.CodeRange;
import org.jruby.truffle.core.rope.Rope;
import org.jruby.truffle.core.string.StringOperations;
import org.jruby.truffle.stdlib.sockets.NativeSockets;
import org.jruby.truffle.platform.Sockets;
import org.jruby.util.ByteList;

@TypeSystemReference(RubyTypes.class)
@@ -179,7 +179,7 @@ protected POSIX posix() {
return getContext().getPosix();
}

protected NativeSockets nativeSockets() {
protected Sockets nativeSockets() {
return getContext().getNativeSockets();
}

Original file line number Diff line number Diff line change
@@ -23,29 +23,18 @@
@NodeChild(value = "value", type = RubyNode.class)
public abstract class WriteProgramNameNode extends RubyNode {

/*
* When we call _NSGetArgv we seem to always get a string that looks like what we'd expect from running ps, but
* with a null character inserted early. I don't know where this comes from, but it means I don't know how to get
* the length of space available for writing in the new program name. We therefore about 40 characters, which is
* a number without any foundation, but it at leaast allows the specs to pass, the functionality to be useful,
* and probably avoid crashing anyone's programs. I can't pretend this is great engineering.
*/
private static final int MAX_PROGRAM_NAME_LENGTH = 40;

public WriteProgramNameNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
}

@TruffleBoundary
@Specialization(guards = "isRubyString(value)")
protected Object writeProgramName(DynamicObject value) {
if (getContext().getCrtExterns() != null) {
final String valueString = value.toString();
final Pointer programNameAddress = getContext().getCrtExterns()._NSGetArgv().getPointer(0).getPointer(0);
programNameAddress.putString(0, valueString, MAX_PROGRAM_NAME_LENGTH, StandardCharsets.UTF_8);
@Specialization(guards = "isRubyString(name)")
protected Object writeProgramName(DynamicObject name) {
if (getContext().getProcessName().canSet()) {
getContext().getProcessName().set(name.toString());
}

return value;
return name;
}

}
Original file line number Diff line number Diff line change
@@ -7,8 +7,10 @@
* GNU General Public License version 2
* GNU Lesser General Public License version 2.1
*/
package org.jruby.truffle.core.ffi;
package org.jruby.truffle.platform;

public interface LibCClockGetTime {
import org.jruby.truffle.core.ffi.TimeSpec;

public interface ClockGetTime {
int clock_gettime(int clock_id, TimeSpec timeSpec);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
* code is released under a tri EPL/GPL/LGPL license. You can use it,
* redistribute it and/or modify it under the terms of the:
*
* Eclipse Public License version 1.0
* GNU General Public License version 2
* GNU Lesser General Public License version 2.1
*/
package org.jruby.truffle.platform;

import jnr.posix.POSIX;
import org.jruby.truffle.platform.signal.SignalManager;

public interface NativePlatform {

POSIX getPosix();

SignalManager getSignalManager();

ProcessName getProcessName();

Sockets getSockets();

ClockGetTime getClockGetTime();

RubiniusConfiguration getRubiniusConfiguration();

}
Loading