26
26
27
27
import org .graalvm .nativeimage .StackValue ;
28
28
29
+ import com .oracle .svm .core .Uninterruptible ;
29
30
import com .oracle .svm .core .feature .AutomaticallyRegisteredImageSingleton ;
30
31
import com .oracle .svm .core .posix .headers .Time ;
31
32
import com .oracle .svm .core .util .BasedOnJDKFile ;
@@ -36,10 +37,20 @@ public final class PosixPlatformTimeUtils extends PlatformTimeUtils {
36
37
37
38
@ Override
38
39
@ BasedOnJDKFile ("https://github.com/openjdk/jdk/blob/jdk-24+3/src/hotspot/os/posix/os_posix.cpp#L1409-L1415" )
39
- protected SecondsNanos javaTimeSystemUTC () {
40
+ @ Uninterruptible (reason = "Must not migrate platform threads when executing on a virtual thread." )
41
+ public SecondsNanos javaTimeSystemUTC () {
40
42
Time .timespec ts = StackValue .get (Time .timespec .class );
41
43
int status = PosixUtils .clock_gettime (Time .CLOCK_REALTIME (), ts );
42
44
PosixUtils .checkStatusIs0 (status , "javaTimeSystemUTC: clock_gettime(CLOCK_REALTIME) failed." );
43
- return new SecondsNanos (ts .tv_sec (), ts .tv_nsec ());
45
+ return allocateSecondsNanos0 (ts .tv_sec (), ts .tv_nsec ());
46
+ }
47
+
48
+ @ Uninterruptible (reason = "Wrap the now safe call to interruptibly allocate a SecondsNanos object." , calleeMustBe = false )
49
+ private static SecondsNanos allocateSecondsNanos0 (long seconds , long nanos ) {
50
+ return allocateSecondsNanos (seconds , nanos );
51
+ }
52
+
53
+ private static SecondsNanos allocateSecondsNanos (long seconds , long nanos ) {
54
+ return new SecondsNanos (seconds , nanos );
44
55
}
45
56
}
0 commit comments