This commit is contained in:
Jesper Wilhelmsson 2022-07-14 06:19:40 +00:00
commit a7f83582d3
9 changed files with 117 additions and 61 deletions

View File

@ -170,13 +170,13 @@ import static java.util.concurrent.TimeUnit.NANOSECONDS;
* <p> Platform threads inherit the daemon status, thread priority, and when not * <p> Platform threads inherit the daemon status, thread priority, and when not
* provided (or not selected by a security manager), the thread group. * provided (or not selected by a security manager), the thread group.
* *
* <p> Inherited Access Control Context: * <p> Creating a platform thread {@linkplain AccessController#getContext() captures} the
* Creating a platform thread {@linkplain AccessController#getContext() captures} the
* {@linkplain AccessControlContext caller context} to limit the {@linkplain Permission * {@linkplain AccessControlContext caller context} to limit the {@linkplain Permission
* permissions} of {@linkplain AccessController#doPrivileged(PrivilegedAction) privileged * permissions} of the new thread when it executes code that performs a {@linkplain
* actions} performed by code in the thread. Creating a virtual thread does not capture * AccessController#doPrivileged(PrivilegedAction) privileged action}. The captured
* the caller context; virtual threads have no permissions when executing code that * caller context is the new thread's "Inherited {@link AccessControlContext}". Creating
* performs privileged actions. * a virtual thread does not capture the caller context; virtual threads have no
* permissions when executing code that performs a privileged action.
* *
* <p> Unless otherwise specified, passing a {@code null} argument to a constructor * <p> Unless otherwise specified, passing a {@code null} argument to a constructor
* or method in this class will cause a {@link NullPointerException} to be thrown. * or method in this class will cause a {@link NullPointerException} to be thrown.

View File

@ -167,7 +167,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
} }
/** /**
* Reads a byte at the given offset from this address, with the given layout. * Reads a byte from this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -188,7 +188,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
byte get(ValueLayout.OfByte layout, long offset); byte get(ValueLayout.OfByte layout, long offset);
/** /**
* Writes a byte at the given offset from this address, with the given layout. * Writes a byte into this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -209,7 +209,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
void set(ValueLayout.OfByte layout, long offset, byte value); void set(ValueLayout.OfByte layout, long offset, byte value);
/** /**
* Reads a boolean at the given offset from this address, with the given layout. * Reads a boolean from this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -230,7 +230,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
boolean get(ValueLayout.OfBoolean layout, long offset); boolean get(ValueLayout.OfBoolean layout, long offset);
/** /**
* Writes a boolean at the given offset from this address, with the given layout. * Writes a boolean into this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -251,7 +251,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
void set(ValueLayout.OfBoolean layout, long offset, boolean value); void set(ValueLayout.OfBoolean layout, long offset, boolean value);
/** /**
* Reads a char at the given offset from this address, with the given layout. * Reads a char from this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -272,7 +272,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
char get(ValueLayout.OfChar layout, long offset); char get(ValueLayout.OfChar layout, long offset);
/** /**
* Writes a char at the given offset from this address, with the given layout. * Writes a char into this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -293,7 +293,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
void set(ValueLayout.OfChar layout, long offset, char value); void set(ValueLayout.OfChar layout, long offset, char value);
/** /**
* Reads a short at the given offset from this address, with the given layout. * Reads a short from this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -314,7 +314,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
short get(ValueLayout.OfShort layout, long offset); short get(ValueLayout.OfShort layout, long offset);
/** /**
* Writes a short at the given offset from this address, with the given layout. * Writes a short into this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -335,7 +335,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
void set(ValueLayout.OfShort layout, long offset, short value); void set(ValueLayout.OfShort layout, long offset, short value);
/** /**
* Reads an int at the given offset from this address, with the given layout. * Reads an int from this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -356,7 +356,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
int get(ValueLayout.OfInt layout, long offset); int get(ValueLayout.OfInt layout, long offset);
/** /**
* Writes an int at the given offset from this address, with the given layout. * Writes an int into this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -377,7 +377,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
void set(ValueLayout.OfInt layout, long offset, int value); void set(ValueLayout.OfInt layout, long offset, int value);
/** /**
* Reads a float at the given offset from this address, with the given layout. * Reads a float from this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -398,7 +398,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
float get(ValueLayout.OfFloat layout, long offset); float get(ValueLayout.OfFloat layout, long offset);
/** /**
* Writes a float at the given offset from this address, with the given layout. * Writes a float into this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -419,7 +419,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
void set(ValueLayout.OfFloat layout, long offset, float value); void set(ValueLayout.OfFloat layout, long offset, float value);
/** /**
* Reads a long at the given offset from this address, with the given layout. * Reads a long from this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -440,7 +440,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
long get(ValueLayout.OfLong layout, long offset); long get(ValueLayout.OfLong layout, long offset);
/** /**
* Writes a long at the given offset from this address, with the given layout. * Writes a long into this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -461,7 +461,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
void set(ValueLayout.OfLong layout, long offset, long value); void set(ValueLayout.OfLong layout, long offset, long value);
/** /**
* Reads a double at the given offset from this address, with the given layout. * Reads a double from this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -482,7 +482,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
double get(ValueLayout.OfDouble layout, long offset); double get(ValueLayout.OfDouble layout, long offset);
/** /**
* Writes a double at the given offset from this address, with the given layout. * Writes a double into this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -503,7 +503,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
void set(ValueLayout.OfDouble layout, long offset, double value); void set(ValueLayout.OfDouble layout, long offset, double value);
/** /**
* Reads an address at the given offset from this address, with the given layout. * Reads an address from this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -524,7 +524,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
MemoryAddress get(ValueLayout.OfAddress layout, long offset); MemoryAddress get(ValueLayout.OfAddress layout, long offset);
/** /**
* Writes an address at the given offset from this address, with the given layout. * Writes an address into this address at the given offset, with the given layout.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -567,7 +567,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
char getAtIndex(ValueLayout.OfChar layout, long index); char getAtIndex(ValueLayout.OfChar layout, long index);
/** /**
* Writes a char to this address at the given index, scaled by the given layout size. * Writes a char into this address at the given index, scaled by the given layout size.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -611,7 +611,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
short getAtIndex(ValueLayout.OfShort layout, long index); short getAtIndex(ValueLayout.OfShort layout, long index);
/** /**
* Writes a short to this address at the given index, scaled by the given layout size. * Writes a short into this address at the given index, scaled by the given layout size.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -655,7 +655,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
int getAtIndex(ValueLayout.OfInt layout, long index); int getAtIndex(ValueLayout.OfInt layout, long index);
/** /**
* Writes an int to this address at the given index, scaled by the given layout size. * Writes an int into this address at the given index, scaled by the given layout size.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -699,7 +699,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
float getAtIndex(ValueLayout.OfFloat layout, long index); float getAtIndex(ValueLayout.OfFloat layout, long index);
/** /**
* Writes a float to this address at the given index, scaled by the given layout size. * Writes a float into this address at the given index, scaled by the given layout size.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -743,7 +743,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
long getAtIndex(ValueLayout.OfLong layout, long index); long getAtIndex(ValueLayout.OfLong layout, long index);
/** /**
* Writes a long to this address at the given index, scaled by the given layout size. * Writes a long into this address at the given index, scaled by the given layout size.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -787,7 +787,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
double getAtIndex(ValueLayout.OfDouble layout, long index); double getAtIndex(ValueLayout.OfDouble layout, long index);
/** /**
* Writes a double to this address at the given index, scaled by the given layout size. * Writes a double into this address at the given index, scaled by the given layout size.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash
@ -831,7 +831,7 @@ public sealed interface MemoryAddress extends Addressable permits MemoryAddressI
MemoryAddress getAtIndex(ValueLayout.OfAddress layout, long index); MemoryAddress getAtIndex(ValueLayout.OfAddress layout, long index);
/** /**
* Writes an address to this address at the given index, scaled by the given layout size. * Writes an address into this address at the given index, scaled by the given layout size.
* <p> * <p>
* This method is <a href="package-summary.html#restricted"><em>restricted</em></a>. * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
* Restricted methods are unsafe, and, if used incorrectly, their use might crash * Restricted methods are unsafe, and, if used incorrectly, their use might crash

View File

@ -1083,7 +1083,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Reads a byte at the given offset from this segment, with the given layout. * Reads a byte from this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be read. * @param layout the layout of the memory region to be read.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1104,7 +1104,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes a byte at the given offset from this segment, with the given layout. * Writes a byte into this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1126,7 +1126,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Reads a boolean at the given offset from this segment, with the given layout. * Reads a boolean from this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be read. * @param layout the layout of the memory region to be read.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1147,7 +1147,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes a boolean at the given offset from this segment, with the given layout. * Writes a boolean into this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1169,7 +1169,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Reads a char at the given offset from this segment, with the given layout. * Reads a char from this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be read. * @param layout the layout of the memory region to be read.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1190,7 +1190,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes a char at the given offset from this segment, with the given layout. * Writes a char into this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1212,7 +1212,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Reads a short at the given offset from this segment, with the given layout. * Reads a short from this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be read. * @param layout the layout of the memory region to be read.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1233,7 +1233,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes a short at the given offset from this segment, with the given layout. * Writes a short into this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1255,7 +1255,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Reads an int at the given offset from this segment, with the given layout. * Reads an int from this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be read. * @param layout the layout of the memory region to be read.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1276,7 +1276,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes an int at the given offset from this segment, with the given layout. * Writes an int into this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1298,7 +1298,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Reads a float at the given offset from this segment, with the given layout. * Reads a float from this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be read. * @param layout the layout of the memory region to be read.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1319,7 +1319,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes a float at the given offset from this segment, with the given layout. * Writes a float into this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1341,7 +1341,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Reads a long at the given offset from this segment, with the given layout. * Reads a long from this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be read. * @param layout the layout of the memory region to be read.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1362,7 +1362,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes a long at the given offset from this segment, with the given layout. * Writes a long into this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1384,7 +1384,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Reads a double at the given offset from this segment, with the given layout. * Reads a double from this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be read. * @param layout the layout of the memory region to be read.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1405,7 +1405,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes a double at the given offset from this segment, with the given layout. * Writes a double into this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1427,7 +1427,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Reads an address at the given offset from this segment, with the given layout. * Reads an address from this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be read. * @param layout the layout of the memory region to be read.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1448,7 +1448,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes an address at the given offset from this segment, with the given layout. * Writes an address into this segment at the given offset, with the given layout.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param offset offset in bytes (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1494,7 +1494,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes a char to this segment at the given index, scaled by the given layout size. * Writes a char into this segment at the given index, scaled by the given layout size.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1543,7 +1543,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes a short to this segment at the given index, scaled by the given layout size. * Writes a short into this segment at the given index, scaled by the given layout size.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1592,7 +1592,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes an int to this segment at the given index, scaled by the given layout size. * Writes an int into this segment at the given index, scaled by the given layout size.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1641,7 +1641,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes a float to this segment at the given index, scaled by the given layout size. * Writes a float into this segment at the given index, scaled by the given layout size.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1690,7 +1690,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes a long to this segment at the given index, scaled by the given layout size. * Writes a long into this segment at the given index, scaled by the given layout size.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1739,7 +1739,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes a double to this segment at the given index, scaled by the given layout size. * Writes a double into this segment at the given index, scaled by the given layout size.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,
@ -1788,7 +1788,7 @@ public sealed interface MemorySegment extends Addressable permits AbstractMemory
} }
/** /**
* Writes an address to this segment at the given index, scaled by the given layout size. * Writes an address into this segment at the given index, scaled by the given layout size.
* *
* @param layout the layout of the memory region to be written. * @param layout the layout of the memory region to be written.
* @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment, * @param index index (relative to this segment). For instance, if this segment is a {@linkplain #isNative() native} segment,

View File

@ -319,6 +319,9 @@ public interface SegmentAllocator {
*/ */
default MemorySegment allocateArray(MemoryLayout elementLayout, long count) { default MemorySegment allocateArray(MemoryLayout elementLayout, long count) {
Objects.requireNonNull(elementLayout); Objects.requireNonNull(elementLayout);
if (count < 0) {
throw new IllegalArgumentException("Negative array size");
}
return allocate(MemoryLayout.sequenceLayout(count, elementLayout)); return allocate(MemoryLayout.sequenceLayout(count, elementLayout));
} }

View File

@ -78,7 +78,9 @@ public final class ArenaAllocator implements SegmentAllocator {
return slice; return slice;
} else { } else {
long maxPossibleAllocationSize = bytesSize + bytesAlignment - 1; long maxPossibleAllocationSize = bytesSize + bytesAlignment - 1;
if (maxPossibleAllocationSize > blockSize) { if (maxPossibleAllocationSize < 0) {
throw new OutOfMemoryError();
} else if (maxPossibleAllocationSize > blockSize) {
// too big // too big
return newSegment(bytesSize, bytesAlignment); return newSegment(bytesSize, bytesAlignment);
} else { } else {

View File

@ -148,6 +148,7 @@ vmTestbase/nsk/jvmti/scenarios/jni_interception/JI05/ji05t001/TestDescription.ja
vmTestbase/nsk/jvmti/scenarios/jni_interception/JI06/ji06t001/TestDescription.java 8219652 aix-ppc64 vmTestbase/nsk/jvmti/scenarios/jni_interception/JI06/ji06t001/TestDescription.java 8219652 aix-ppc64
vmTestbase/nsk/jvmti/SetJNIFunctionTable/setjniftab001/TestDescription.java 8219652 aix-ppc64 vmTestbase/nsk/jvmti/SetJNIFunctionTable/setjniftab001/TestDescription.java 8219652 aix-ppc64
vmTestbase/nsk/jvmti/AttachOnDemand/attach002a/TestDescription.java 8277812 generic-all vmTestbase/nsk/jvmti/AttachOnDemand/attach002a/TestDescription.java 8277812 generic-all
vmTestbase/nsk/jvmti/scenarios/capability/CM03/cm03t001/TestDescription.java 8073470 linux-all
vmTestbase/gc/lock/jni/jnilock002/TestDescription.java 8192647 generic-all vmTestbase/gc/lock/jni/jnilock002/TestDescription.java 8192647 generic-all

View File

@ -1,3 +1,25 @@
#
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
com/sun/jdi/EATests.java#id0 8264699 generic-all com/sun/jdi/EATests.java#id0 8264699 generic-all
@ -33,6 +55,8 @@ com/sun/jdi/StepTest.java 8285422 generic-all
com/sun/jdi/redefine/RedefineTest.java 8285422 generic-all com/sun/jdi/redefine/RedefineTest.java 8285422 generic-all
com/sun/jdi/redefineMethod/RedefineTest.java 8285422 generic-all com/sun/jdi/redefineMethod/RedefineTest.java 8285422 generic-all
com/sun/jdi/InvokeHangTest.java 8290200 macosx-x64
#### ####
# JDI SDE Tests # JDI SDE Tests
# Use custom classpath # Use custom classpath
@ -42,5 +66,3 @@ com/sun/jdi/sde/MangleTest.java 8285423 generic-all
com/sun/jdi/sde/MangleStepTest.java 8285423 generic-all com/sun/jdi/sde/MangleStepTest.java 8285423 generic-all
com/sun/jdi/sde/TemperatureTableTest.java 8285423 generic-all com/sun/jdi/sde/TemperatureTableTest.java 8285423 generic-all
com/sun/jdi/sde/SourceDebugExtensionTest.java 8285423 generic-all com/sun/jdi/sde/SourceDebugExtensionTest.java 8285423 generic-all
com/sun/jdi/EATests.java#id0 8264699 generic-all

View File

@ -160,6 +160,17 @@ public class TestSegmentAllocators {
allocator.allocate(1, 3); allocator.allocate(1, 3);
} }
@Test(dataProvider = "allocators", expectedExceptions = IllegalArgumentException.class)
public void testBadAllocationArrayNegSize(SegmentAllocator allocator) {
allocator.allocateArray(ValueLayout.JAVA_BYTE, -1);
}
@Test(expectedExceptions = OutOfMemoryError.class)
public void testBadArenaNullReturn() {
SegmentAllocator segmentAllocator = SegmentAllocator.newNativeArena(MemorySession.openImplicit());
segmentAllocator.allocate(Long.MAX_VALUE, 2);
}
@Test @Test
public void testArrayAllocateDelegation() { public void testArrayAllocateDelegation() {
AtomicInteger calls = new AtomicInteger(); AtomicInteger calls = new AtomicInteger();

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -29,7 +29,7 @@
* @library .. * @library ..
* @library /test/lib * @library /test/lib
* @build jdk.test.lib.RandomFactory * @build jdk.test.lib.RandomFactory
* @run main/othervm/timeout=240 -Xmx4G LargeGatheringWrite * @run main/othervm/timeout=480 -Xmx4G LargeGatheringWrite
* @key randomness * @key randomness
*/ */
import java.io.IOException; import java.io.IOException;
@ -51,7 +51,17 @@ public class LargeGatheringWrite {
private static final Random RND = RandomFactory.getRandom(); private static final Random RND = RandomFactory.getRandom();
private static long t0;
private static void printTime(String msg) {
System.out.printf("TIMESTAMP: %-16s: %f seconds%n", msg,
(System.nanoTime() - t0)/1000000000.0);
}
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
t0 = System.nanoTime();
printTime("start");
// Create direct and heap buffers // Create direct and heap buffers
ByteBuffer direct = ByteBuffer.allocateDirect(GB); ByteBuffer direct = ByteBuffer.allocateDirect(GB);
ByteBuffer heap = ByteBuffer.allocate(GB); ByteBuffer heap = ByteBuffer.allocate(GB);
@ -83,6 +93,7 @@ public class LargeGatheringWrite {
// Write the data to a temporary file // Write the data to a temporary file
Path tempFile = Files.createTempFile("LargeGatheringWrite", ".dat"); Path tempFile = Files.createTempFile("LargeGatheringWrite", ".dat");
printTime("before writing");
System.out.printf("Writing %d bytes of data...%n", totalLength); System.out.printf("Writing %d bytes of data...%n", totalLength);
try (FileChannel fcw = FileChannel.open(tempFile, CREATE, WRITE);) { try (FileChannel fcw = FileChannel.open(tempFile, CREATE, WRITE);) {
// Print size of individual writes and total number written // Print size of individual writes and total number written
@ -93,11 +104,14 @@ public class LargeGatheringWrite {
bytesWritten += n; bytesWritten += n;
} }
System.out.printf("Total of %d bytes written\n", bytesWritten); System.out.printf("Total of %d bytes written\n", bytesWritten);
printTime("after writing");
// Verify the content written // Verify the content written
try (FileChannel fcr = FileChannel.open(tempFile, READ);) { try (FileChannel fcr = FileChannel.open(tempFile, READ);) {
byte[] bytes = null; byte[] bytes = null;
for (ByteBuffer buf : bigBuffers) { for (ByteBuffer buf : bigBuffers) {
printTime("before verifying");
// For each buffer read the corresponding number of bytes // For each buffer read the corresponding number of bytes
buf.rewind(); buf.rewind();
int length = buf.remaining(); int length = buf.remaining();
@ -117,10 +131,13 @@ public class LargeGatheringWrite {
String msg = String.format("mismatch: %d%n", mismatch); String msg = String.format("mismatch: %d%n", mismatch);
throw new RuntimeException(msg); throw new RuntimeException(msg);
} }
printTime("after verifying");
} }
} }
} finally { } finally {
Files.delete(tempFile); Files.delete(tempFile);
} }
printTime("end");
} }
} }