> The JvmtiTagMap can be deleted while it is posting.  The JvmtiEnv is still on 
> the list but the env is "disposed" of and the tag_map is deleted to save 
> memory until the JvmtiEnv can be reclaimed at a safepoint and taken off the 
> list.
> 
> There's a check JvmtiEnvBase::check_for_periodic_clean_up() that determines 
> whether the JvmtiEnv can be taken off the list and that check looks for 
> whether threads are in the middle of JvmtiEnvIterator which sets 
> Thread::jvmti_env_iteration_count.  So this part is safe for the JvmtiTagMap 
> changes.
> 
> The fix is to clear the JvmtiTagMapTable of the entries inside the table lock 
> to save memory but leave JvmtiTagMap intact so that we can load a valid 
> pointer when iterating through JvmtiEnvIterator.  We could also not do this 
> at all and let the JvmtiTagMap destructor delete the table when the JvmtiEnv 
> is also deleted, but we don't know what customer situation led to this code 
> in the first place.

Coleen Phillimore 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 three additional 
commits since the last revision:

 - Merge branch 'master' into more-jvmti-table
 - Rename JvmtiTagMap::clear() and fix JvmtiTagMapTable::clear() to null out 
deleted entries.
 - 8257140: Crash in JvmtiTagMap::flush_object_free_events()

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/1539/files
  - new: https://git.openjdk.java.net/jdk/pull/1539/files/9aaa0c88..a035ec89

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=1539&range=01
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=1539&range=00-01

  Stats: 24816 lines in 603 files changed: 13248 ins; 3971 del; 7597 mod
  Patch: https://git.openjdk.java.net/jdk/pull/1539.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/1539/head:pull/1539

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

Reply via email to