Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8268635: Corrupt oop in ClassLoaderData #4701

Closed
wants to merge 1 commit into from
Closed

Conversation

@coleenp
Copy link
Contributor

@coleenp coleenp commented Jul 7, 2021

We worked on writing a test for this but weren't successful. Based on analysis by @stefank this missing call may have been the cause of the crash.
Tested with tier1-3.


Progress

  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue
  • Change must be properly reviewed

Issue

Reviewers

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.java.net/jdk pull/4701/head:pull/4701
$ git checkout pull/4701

Update a local copy of the PR:
$ git checkout pull/4701
$ git pull https://git.openjdk.java.net/jdk pull/4701/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 4701

View PR using the GUI difftool:
$ git pr show -t 4701

Using diff file

Download this PR as a diff file:
https://git.openjdk.java.net/jdk/pull/4701.diff

@bridgekeeper
Copy link

@bridgekeeper bridgekeeper bot commented Jul 7, 2021

👋 Welcome back coleenp! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk openjdk bot added the rfr label Jul 7, 2021
@openjdk
Copy link

@openjdk openjdk bot commented Jul 7, 2021

@coleenp The following label will be automatically applied to this pull request:

  • hotspot-runtime

When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command.

@mlbridge
Copy link

@mlbridge mlbridge bot commented Jul 7, 2021

Webrevs

iklam
iklam approved these changes Jul 7, 2021
Copy link
Member

@iklam iklam left a comment

LGTM

@coleenp
Copy link
Contributor Author

@coleenp coleenp commented Jul 7, 2021

Thanks Ioi. Sorry about the force push. The github actions were failing because my repo was out of date.

@openjdk
Copy link

@openjdk openjdk bot commented Jul 7, 2021

@coleenp This change now passes all automated pre-integration checks.

ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details.

After integration, the commit message for the final commit will be:

8268635: Corrupt oop in ClassLoaderData

Reviewed-by: iklam, dholmes

You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed.

At the time when this comment was updated there had been 2 new commits pushed to the master branch:

  • 3d090e7: 8267625: AARCH64: typo in LIR_Assembler::emit_profile_type
  • a9e2010: 8268425: Show decimal nid of OSThread instead of hex format one

Please see this link for an up-to-date comparison between the source branch of this pull request and the master branch.
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details.

➡️ To integrate this PR with the above commit message to the master branch, type /integrate in a new comment.

@openjdk openjdk bot added the ready label Jul 7, 2021
Copy link
Member

@dholmes-ora dholmes-ora left a comment

Hi Coleen,

Given the code in add_handle this change seems appropriate. But in looking at the other code I did notice that this call to record_modified_oops in ClassLoaderData::record_dependency seems redundant:

>     Handle dependency(Thread::current(), to);
>     add_handle(dependency);
>     // Added a potentially young gen oop to the ClassLoaderData
>     record_modified_oops();
> 

And it did raise a question for me as to whether the code that checks (and potentially clears) _modified_oops can run concurrently with this code, as we set the flag before we actually do the addition in the other methods?

Thanks,
David

@navyxliu
Copy link
Contributor

@navyxliu navyxliu commented Jul 7, 2021

Hi, Coleen,

Thank you for taking this issue. your code change looks good to me.

IIUC, this PR covers the code path fromModuleEntry::set_shared_protection_domain, where needs record_modified_oops().
ClassLoaderData::record_dependency() seems to have a redundant record_modified_oops, but I don't think it affects correctness.

thanks,
--lx

@coleenp
Copy link
Contributor Author

@coleenp coleenp commented Jul 7, 2021

Thanks David and Xin, thanks for noticing the clearly redundant record_modified_oops. It was left over from when dependency oops were not in the _handles area.
@dholmes-ora Serial and Parallel GC clear modified oops in a safepoint. I don't remember how G1 used this field. It has some mechanism of claiming the CLD. Maybe @tschatzl or Kim can check it out.

@coleenp
Copy link
Contributor Author

@coleenp coleenp commented Jul 7, 2021

Thanks @iklam for the review and help trying to write the test.
/integrate

@openjdk
Copy link

@openjdk openjdk bot commented Jul 7, 2021

Going to push as commit 3586a23.
Since your change was applied there have been 8 commits pushed to the master branch:

  • bffb1a7: 8269923: runtime/jni/checked/TestPrimitiveArrayCriticalWithBadParam.java failed with "FATAL ERROR in native method: Primitive type array expected but not received for JNI array operation"
  • 77a5b7b: 8269761: idea.sh missing .exe suffix when invoking javac on WSL
  • 248aa50: 8269294: Verify_before/after_young_collection should execute all verification
  • 18b80c7: 8269908: Move MemoryService::track_memory_usage call into G1MonitoringScope
  • a685011: 8269022: Put evacuation failure string directly into gc=info log message
  • 72530ef: 8269574: C2: Avoid redundant uncommon traps in GraphKit::builtin_throw() for JVMTI exception events
  • 3d090e7: 8267625: AARCH64: typo in LIR_Assembler::emit_profile_type
  • a9e2010: 8268425: Show decimal nid of OSThread instead of hex format one

Your commit was automatically rebased without conflicts.

@openjdk openjdk bot closed this Jul 7, 2021
@openjdk openjdk bot added integrated and removed ready rfr labels Jul 7, 2021
@openjdk
Copy link

@openjdk openjdk bot commented Jul 7, 2021

@coleenp Pushed as commit 3586a23.

💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored.

@coleenp coleenp deleted the cld-pd branch Jul 7, 2021
@earthling-amzn
Copy link
Contributor

@earthling-amzn earthling-amzn commented Jul 8, 2021

/backport jdk15u-dev

@openjdk
Copy link

@openjdk openjdk bot commented Jul 8, 2021

@earthling-amzn Unknown command backport - for a list of valid commands use /help.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
5 participants