8284161: Implementation of Virtual Threads (Preview)

Co-authored-by: Ron Pressler <rpressler@openjdk.org>
Co-authored-by: Alan Bateman <alanb@openjdk.org>
Co-authored-by: Erik Österlund <eosterlund@openjdk.org>
Co-authored-by: Andrew Haley <aph@openjdk.org>
Co-authored-by: Rickard Bäckman <rbackman@openjdk.org>
Co-authored-by: Markus Grönlund <mgronlun@openjdk.org>
Co-authored-by: Leonid Mesnik <lmesnik@openjdk.org>
Co-authored-by: Serguei Spitsyn <sspitsyn@openjdk.org>
Co-authored-by: Chris Plummer <cjplummer@openjdk.org>
Co-authored-by: Coleen Phillimore <coleenp@openjdk.org>
Co-authored-by: Robbin Ehn <rehn@openjdk.org>
Co-authored-by: Stefan Karlsson <stefank@openjdk.org>
Co-authored-by: Thomas Schatzl <tschatzl@openjdk.org>
Co-authored-by: Sergey Kuksenko <skuksenko@openjdk.org>
Reviewed-by: lancea, eosterlund, rehn, sspitsyn, stefank, tschatzl, dfuchs, lmesnik, dcubed, kevinw, amenkov, dlong, mchung, psandoz, bpb, coleenp, smarks, egahlin, mseledtsov, coffeys, darcy
This commit is contained in:
Alan Bateman 2022-05-07 08:06:16 +00:00
parent 5212535a27
commit 9583e3657e
1133 changed files with 95935 additions and 8335 deletions

View file

@ -35,11 +35,10 @@ import java.nio.file.LinkPermission;
import java.nio.file.StandardCopyOption;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import jdk.internal.misc.Blocker;
import static sun.nio.fs.UnixNativeDispatcher.*;
import static sun.nio.fs.UnixConstants.*;
/**
* Unix implementation of Path#copyTo and Path#moveTo methods.
*/
@ -251,7 +250,12 @@ class UnixCopyFile {
try {
// transfer bytes to target file
try {
transfer(fo, fi, addressToPollForCancel);
long comp = Blocker.begin();
try {
transfer(fo, fi, addressToPollForCancel);
} finally {
Blocker.end(comp);
}
} catch (UnixException x) {
x.rethrowAsIOException(source, target);
}

View file

@ -26,6 +26,7 @@
package sun.nio.fs;
import java.util.function.Function;
import jdk.internal.misc.Blocker;
/**
* Unix system and library calls.
@ -65,11 +66,13 @@ class UnixNativeDispatcher {
* int open(const char* path, int oflag, mode_t mode)
*/
static int open(UnixPath path, int flags, int mode) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
return open0(buffer.address(), flags, mode);
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
return open0(buffer.address(), flags, mode);
} finally {
Blocker.end(comp);
}
}
}
private static native int open0(long pathAddress, int flags, int mode)
@ -79,11 +82,13 @@ class UnixNativeDispatcher {
* int openat(int dfd, const char* path, int oflag, mode_t mode)
*/
static int openat(int dfd, byte[] path, int flags, int mode) throws UnixException {
NativeBuffer buffer = NativeBuffers.asNativeBuffer(path);
try {
return openat0(dfd, buffer.address(), flags, mode);
} finally {
buffer.release();
try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(path)) {
long comp = Blocker.begin();
try {
return openat0(dfd, buffer.address(), flags, mode);
} finally {
Blocker.end(comp);
}
}
}
private static native int openat0(int dfd, long pathAddress, int flags, int mode)
@ -131,13 +136,14 @@ class UnixNativeDispatcher {
* link(const char* existing, const char* new)
*/
static void link(UnixPath existing, UnixPath newfile) throws UnixException {
NativeBuffer existingBuffer = copyToNativeBuffer(existing);
NativeBuffer newBuffer = copyToNativeBuffer(newfile);
try {
link0(existingBuffer.address(), newBuffer.address());
} finally {
newBuffer.release();
existingBuffer.release();
try (NativeBuffer existingBuffer = copyToNativeBuffer(existing);
NativeBuffer newBuffer = copyToNativeBuffer(newfile)) {
long comp = Blocker.begin();
try {
link0(existingBuffer.address(), newBuffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native void link0(long existingAddress, long newAddress)
@ -147,11 +153,13 @@ class UnixNativeDispatcher {
* unlink(const char* path)
*/
static void unlink(UnixPath path) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
unlink0(buffer.address());
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
unlink0(buffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native void unlink0(long pathAddress) throws UnixException;
@ -160,11 +168,13 @@ class UnixNativeDispatcher {
* unlinkat(int dfd, const char* path, int flag)
*/
static void unlinkat(int dfd, byte[] path, int flag) throws UnixException {
NativeBuffer buffer = NativeBuffers.asNativeBuffer(path);
try {
unlinkat0(dfd, buffer.address(), flag);
} finally {
buffer.release();
try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(path)) {
long comp = Blocker.begin();
try {
unlinkat0(dfd, buffer.address(), flag);
} finally {
Blocker.end(comp);
}
}
}
private static native void unlinkat0(int dfd, long pathAddress, int flag)
@ -174,11 +184,13 @@ class UnixNativeDispatcher {
* mknod(const char* path, mode_t mode, dev_t dev)
*/
static void mknod(UnixPath path, int mode, long dev) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
mknod0(buffer.address(), mode, dev);
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
mknod0(buffer.address(), mode, dev);
} finally {
Blocker.end(comp);
}
}
}
private static native void mknod0(long pathAddress, int mode, long dev)
@ -188,13 +200,14 @@ class UnixNativeDispatcher {
* rename(const char* old, const char* new)
*/
static void rename(UnixPath from, UnixPath to) throws UnixException {
NativeBuffer fromBuffer = copyToNativeBuffer(from);
NativeBuffer toBuffer = copyToNativeBuffer(to);
try {
rename0(fromBuffer.address(), toBuffer.address());
} finally {
toBuffer.release();
fromBuffer.release();
try (NativeBuffer fromBuffer = copyToNativeBuffer(from);
NativeBuffer toBuffer = copyToNativeBuffer(to)) {
long comp = Blocker.begin();
try {
rename0(fromBuffer.address(), toBuffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native void rename0(long fromAddress, long toAddress)
@ -204,13 +217,14 @@ class UnixNativeDispatcher {
* renameat(int fromfd, const char* old, int tofd, const char* new)
*/
static void renameat(int fromfd, byte[] from, int tofd, byte[] to) throws UnixException {
NativeBuffer fromBuffer = NativeBuffers.asNativeBuffer(from);
NativeBuffer toBuffer = NativeBuffers.asNativeBuffer(to);
try {
renameat0(fromfd, fromBuffer.address(), tofd, toBuffer.address());
} finally {
toBuffer.release();
fromBuffer.release();
try (NativeBuffer fromBuffer = NativeBuffers.asNativeBuffer(from);
NativeBuffer toBuffer = NativeBuffers.asNativeBuffer(to)) {
long comp = Blocker.begin();
try {
renameat0(fromfd, fromBuffer.address(), tofd, toBuffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native void renameat0(int fromfd, long fromAddress, int tofd, long toAddress)
@ -220,11 +234,13 @@ class UnixNativeDispatcher {
* mkdir(const char* path, mode_t mode)
*/
static void mkdir(UnixPath path, int mode) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
mkdir0(buffer.address(), mode);
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
mkdir0(buffer.address(), mode);
} finally {
Blocker.end(comp);
}
}
}
private static native void mkdir0(long pathAddress, int mode) throws UnixException;
@ -233,11 +249,13 @@ class UnixNativeDispatcher {
* rmdir(const char* path)
*/
static void rmdir(UnixPath path) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
rmdir0(buffer.address());
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
rmdir0(buffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native void rmdir0(long pathAddress) throws UnixException;
@ -248,11 +266,13 @@ class UnixNativeDispatcher {
* @return link target
*/
static byte[] readlink(UnixPath path) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
return readlink0(buffer.address());
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
return readlink0(buffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native byte[] readlink0(long pathAddress) throws UnixException;
@ -263,11 +283,13 @@ class UnixNativeDispatcher {
* @return resolved path
*/
static byte[] realpath(UnixPath path) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
return realpath0(buffer.address());
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
return realpath0(buffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native byte[] realpath0(long pathAddress) throws UnixException;
@ -276,13 +298,14 @@ class UnixNativeDispatcher {
* symlink(const char* name1, const char* name2)
*/
static void symlink(byte[] name1, UnixPath name2) throws UnixException {
NativeBuffer targetBuffer = NativeBuffers.asNativeBuffer(name1);
NativeBuffer linkBuffer = copyToNativeBuffer(name2);
try {
symlink0(targetBuffer.address(), linkBuffer.address());
} finally {
linkBuffer.release();
targetBuffer.release();
try (NativeBuffer targetBuffer = NativeBuffers.asNativeBuffer(name1);
NativeBuffer linkBuffer = copyToNativeBuffer(name2)) {
long comp = Blocker.begin();
try {
symlink0(targetBuffer.address(), linkBuffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native void symlink0(long name1, long name2)
@ -292,11 +315,13 @@ class UnixNativeDispatcher {
* stat(const char* path, struct stat* buf)
*/
static void stat(UnixPath path, UnixFileAttributes attrs) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
stat0(buffer.address(), attrs);
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
stat0(buffer.address(), attrs);
} finally {
Blocker.end(comp);
}
}
}
private static native void stat0(long pathAddress, UnixFileAttributes attrs)
@ -309,11 +334,13 @@ class UnixNativeDispatcher {
* @return st_mode (file type and mode) or 0 if an error occurs.
*/
static int stat(UnixPath path) {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
return stat1(buffer.address());
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
return stat1(buffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native int stat1(long pathAddress);
@ -323,11 +350,13 @@ class UnixNativeDispatcher {
* lstat(const char* path, struct stat* buf)
*/
static void lstat(UnixPath path, UnixFileAttributes attrs) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
lstat0(buffer.address(), attrs);
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
lstat0(buffer.address(), attrs);
} finally {
Blocker.end(comp);
}
}
}
private static native void lstat0(long pathAddress, UnixFileAttributes attrs)
@ -336,7 +365,16 @@ class UnixNativeDispatcher {
/**
* fstat(int filedes, struct stat* buf)
*/
static native void fstat(int fd, UnixFileAttributes attrs) throws UnixException;
static void fstat(int fd, UnixFileAttributes attrs) throws UnixException {
long comp = Blocker.begin();
try {
fstat0(fd, attrs);
} finally {
Blocker.end(comp);
}
}
private static native void fstat0(int fd, UnixFileAttributes attrs)
throws UnixException;
/**
* fstatat(int filedes,const char* path, struct stat* buf, int flag)
@ -344,11 +382,13 @@ class UnixNativeDispatcher {
static void fstatat(int dfd, byte[] path, int flag, UnixFileAttributes attrs)
throws UnixException
{
NativeBuffer buffer = NativeBuffers.asNativeBuffer(path);
try {
fstatat0(dfd, buffer.address(), flag, attrs);
} finally {
buffer.release();
try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(path)) {
long comp = Blocker.begin();
try {
fstatat0(dfd, buffer.address(), flag, attrs);
} finally {
Blocker.end(comp);
}
}
}
private static native void fstatat0(int dfd, long pathAddress, int flag,
@ -358,11 +398,13 @@ class UnixNativeDispatcher {
* chown(const char* path, uid_t owner, gid_t group)
*/
static void chown(UnixPath path, int uid, int gid) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
chown0(buffer.address(), uid, gid);
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
chown0(buffer.address(), uid, gid);
} finally {
Blocker.end(comp);
}
}
}
private static native void chown0(long pathAddress, int uid, int gid)
@ -372,11 +414,13 @@ class UnixNativeDispatcher {
* lchown(const char* path, uid_t owner, gid_t group)
*/
static void lchown(UnixPath path, int uid, int gid) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
lchown0(buffer.address(), uid, gid);
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
lchown0(buffer.address(), uid, gid);
} finally {
Blocker.end(comp);
}
}
}
private static native void lchown0(long pathAddress, int uid, int gid)
@ -385,17 +429,27 @@ class UnixNativeDispatcher {
/**
* fchown(int filedes, uid_t owner, gid_t group)
*/
static native void fchown(int fd, int uid, int gid) throws UnixException;
static void fchown(int fd, int uid, int gid) throws UnixException {
long comp = Blocker.begin();
try {
fchown0(fd, uid, gid);
} finally {
Blocker.end(comp);
}
}
static native void fchown0(int fd, int uid, int gid) throws UnixException;
/**
* chmod(const char* path, mode_t mode)
*/
static void chmod(UnixPath path, int mode) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
chmod0(buffer.address(), mode);
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
chmod0(buffer.address(), mode);
} finally {
Blocker.end(comp);
}
}
}
private static native void chmod0(long pathAddress, int mode)
@ -404,7 +458,15 @@ class UnixNativeDispatcher {
/**
* fchmod(int fildes, mode_t mode)
*/
static native void fchmod(int fd, int mode) throws UnixException;
static void fchmod(int fd, int mode) throws UnixException {
long comp = Blocker.begin();
try {
fchmod0(fd, mode);
} finally {
Blocker.end(comp);
}
}
private static native void fchmod0(int fd, int mode) throws UnixException;
/**
* utimes(const char* path, const struct timeval times[2])
@ -412,11 +474,13 @@ class UnixNativeDispatcher {
static void utimes(UnixPath path, long times0, long times1)
throws UnixException
{
NativeBuffer buffer = copyToNativeBuffer(path);
try {
utimes0(buffer.address(), times0, times1);
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
utimes0(buffer.address(), times0, times1);
} finally {
Blocker.end(comp);
}
}
}
private static native void utimes0(long pathAddress, long times0, long times1)
@ -425,12 +489,30 @@ class UnixNativeDispatcher {
/**
* futimes(int fildes, const struct timeval times[2])
*/
static native void futimes(int fd, long times0, long times1) throws UnixException;
static void futimes(int fd, long times0, long times1) throws UnixException {
long comp = Blocker.begin();
try {
futimes0(fd, times0, times1);
} finally {
Blocker.end(comp);
}
}
private static native void futimes0(int fd, long times0, long times1)
throws UnixException;
/**
* futimens(int fildes, const struct timespec times[2])
*/
static native void futimens(int fd, long times0, long times1) throws UnixException;
static void futimens(int fd, long times0, long times1) throws UnixException {
long comp = Blocker.begin();
try {
futimens0(fd, times0, times1);
} finally {
Blocker.end(comp);
}
}
private static native void futimens0(int fd, long times0, long times1)
throws UnixException;
/**
* lutimes(const char* path, const struct timeval times[2])
@ -438,11 +520,13 @@ class UnixNativeDispatcher {
static void lutimes(UnixPath path, long times0, long times1)
throws UnixException
{
NativeBuffer buffer = copyToNativeBuffer(path);
try {
lutimes0(buffer.address(), times0, times1);
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
lutimes0(buffer.address(), times0, times1);
} finally {
Blocker.end(comp);
}
}
}
private static native void lutimes0(long pathAddress, long times0, long times1)
@ -452,11 +536,13 @@ class UnixNativeDispatcher {
* DIR *opendir(const char* dirname)
*/
static long opendir(UnixPath path) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
return opendir0(buffer.address());
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
return opendir0(buffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native long opendir0(long pathAddress) throws UnixException;
@ -477,27 +563,53 @@ class UnixNativeDispatcher {
*
* @return dirent->d_name
*/
static native byte[] readdir(long dir) throws UnixException;
static byte[] readdir(long dir) throws UnixException {
long comp = Blocker.begin();
try {
return readdir0(dir);
} finally {
Blocker.end(comp);
}
}
static native byte[] readdir0(long dir) throws UnixException;
/**
* size_t read(int fildes, void* buf, size_t nbyte)
*/
static native int read(int fildes, long buf, int nbyte) throws UnixException;
static int read(int fildes, long buf, int nbyte) throws UnixException {
long comp = Blocker.begin();
try {
return read0(fildes, buf, nbyte);
} finally {
Blocker.end(comp);
}
}
private static native int read0(int fildes, long buf, int nbyte) throws UnixException;
/**
* size_t writeint fildes, void* buf, size_t nbyte)
*/
static native int write(int fildes, long buf, int nbyte) throws UnixException;
static int write(int fildes, long buf, int nbyte) throws UnixException {
long comp = Blocker.begin();
try {
return write0(fildes, buf, nbyte);
} finally {
Blocker.end(comp);
}
}
private static native int write0(int fildes, long buf, int nbyte) throws UnixException;
/**
* access(const char* path, int amode);
*/
static void access(UnixPath path, int amode) throws UnixException {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
access0(buffer.address(), amode);
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
access0(buffer.address(), amode);
} finally {
Blocker.end(comp);
}
}
}
private static native void access0(long pathAddress, int amode) throws UnixException;
@ -508,16 +620,17 @@ class UnixNativeDispatcher {
* @return true if the file exists, false otherwise
*/
static boolean exists(UnixPath path) {
NativeBuffer buffer = copyToNativeBuffer(path);
try {
return exists0(buffer.address());
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
return exists0(buffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native boolean exists0(long pathAddress);
/**
* struct passwd *getpwuid(uid_t uid);
*
@ -538,11 +651,13 @@ class UnixNativeDispatcher {
* @return passwd->pw_uid
*/
static int getpwnam(String name) throws UnixException {
NativeBuffer buffer = NativeBuffers.asNativeBuffer(Util.toBytes(name));
try {
return getpwnam0(buffer.address());
} finally {
buffer.release();
try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(Util.toBytes(name))) {
long comp = Blocker.begin();
try {
return getpwnam0(buffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native int getpwnam0(long nameAddress) throws UnixException;
@ -553,11 +668,13 @@ class UnixNativeDispatcher {
* @return group->gr_name
*/
static int getgrnam(String name) throws UnixException {
NativeBuffer buffer = NativeBuffers.asNativeBuffer(Util.toBytes(name));
try {
return getgrnam0(buffer.address());
} finally {
buffer.release();
try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(Util.toBytes(name))) {
long comp = Blocker.begin();
try {
return getgrnam0(buffer.address());
} finally {
Blocker.end(comp);
}
}
}
private static native int getgrnam0(long nameAddress) throws UnixException;
@ -568,11 +685,13 @@ class UnixNativeDispatcher {
static void statvfs(UnixPath path, UnixFileStoreAttributes attrs)
throws UnixException
{
NativeBuffer buffer = copyToNativeBuffer(path);
try {
statvfs0(buffer.address(), attrs);
} finally {
buffer.release();
try (NativeBuffer buffer = copyToNativeBuffer(path)) {
long comp = Blocker.begin();
try {
statvfs0(buffer.address(), attrs);
} finally {
Blocker.end(comp);
}
}
}
private static native void statvfs0(long pathAddress, UnixFileStoreAttributes attrs)
@ -586,11 +705,16 @@ class UnixNativeDispatcher {
/**
* ssize_t fgetxattr(int filedes, const char *name, void *value, size_t size);
*/
static int fgetxattr(int filedes, byte[] name, long valueAddress,
int valueLen) throws UnixException
static int fgetxattr(int filedes, byte[] name, long valueAddress, int valueLen)
throws UnixException
{
try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(name)) {
return fgetxattr0(filedes, buffer.address(), valueAddress, valueLen);
long comp = Blocker.begin();
try {
return fgetxattr0(filedes, buffer.address(), valueAddress, valueLen);
} finally {
Blocker.end(comp);
}
}
}
@ -600,11 +724,16 @@ class UnixNativeDispatcher {
/**
* fsetxattr(int filedes, const char *name, const void *value, size_t size, int flags);
*/
static void fsetxattr(int filedes, byte[] name, long valueAddress,
int valueLen) throws UnixException
static void fsetxattr(int filedes, byte[] name, long valueAddress, int valueLen)
throws UnixException
{
try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(name)) {
fsetxattr0(filedes, buffer.address(), valueAddress, valueLen);
long comp = Blocker.begin();
try {
fsetxattr0(filedes, buffer.address(), valueAddress, valueLen);
} finally {
Blocker.end(comp);
}
}
}
@ -616,7 +745,12 @@ class UnixNativeDispatcher {
*/
static void fremovexattr(int filedes, byte[] name) throws UnixException {
try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(name)) {
fremovexattr0(filedes, buffer.address());
long comp = Blocker.begin();
try {
fremovexattr0(filedes, buffer.address());
} finally {
Blocker.end(comp);
}
}
}