RFR: 8284161: Implementation of Virtual Threads (Preview) [v3]

Alan Bateman alanb at openjdk.java.net
Sun Apr 17 06:58:42 UTC 2022


On Sun, 17 Apr 2022 03:49:19 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:

>> Alan Bateman has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision:
>> 
>>  - Refresh
>>  - Refresh
>>  - Merge with jdk-19+18
>>  - Refresh
>>  - Initial push
>
> src/java.base/share/classes/java/io/PrintStream.java line 1420:
> 
>> 1418:             } else {
>> 1419:                 synchronized (this) {
>> 1420:                     implFormat(format, args);
> 
> I think there's a typo here. I think it should have been:
> 
> 
> implFormat(l, format, args);

Well spotted, the locale should be provided.

> src/java.base/share/classes/java/lang/Thread.java line 602:
> 
>> 600:         } else {
>> 601:             // getContextClassLoader not trusted
>> 602:             ClassLoader cl = parent.contextClassLoader;
> 
> I might be misreading the comment on that line, but reading this if/else block a few times, I'm unsure what the expectations here are.
> 
> It's my understanding that a call to `getContextClassLoader()` can't be trusted if that method has been overridden by the passed `Thread` type. In such cases, we don't call that method and instead just use the field value of `contextClassLoader` (which is a private field on `Thread`). Is that understanding correct? If yes, then the condition in the `if` block a few lines above, looks odd. It seems to be calling the `getContextClassLoader()` if  that method is overridden by the passed `Thread` type, i.e. the untrusted case. Should it instead be:
> 
> if (sm == null || !isCCLOverridden(parent.getClass())) {
>     return parent.getContextClassLoader();
> }
> 
> (notice the negation)

This code hasn't changed, it's just moved to a helper method. When running with a security manager and the CCL methods aren't overridden, then it avoids the permission check. However, I can see how the comment is mis-reading so we can improve that.

-------------

PR: https://git.openjdk.java.net/jdk/pull/8166


More information about the hotspot-jfr-dev mailing list