RFR(XXS): 8238180: RunThese30M failed "assert(t->jfr_thread_local()->shelved_buffer() == __null) failed: invariant"

Erik Gahlin erik.gahlin at oracle.com
Tue Mar 10 14:26:46 UTC 2020


Looks good.

Erik

On 2020-03-05 23:48, Markus Gronlund wrote:
> Greetings,
>
> Please review this small adjustment to relax some assertions that can be triggered by the DeoptimizationEvent.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8238180
> Testing: jdk_jfr
> Description:
> The newly introduced event for Deoptimization comes into flush from a previously unknown location. The flush path taken is the native path, but the thread has still its Java context, including its stored away regular buffer (its working with a large buffer lease on the Java side). There is nothing wrong in doing this, the native event can easily be accommodated after a regular flush, so the assertions should be relaxed.
>
> Thanks
> Markus
>
> Change:
>
> diff -r e804de2e6d4a -r 6c6e978c5f60 src/hotspot/share/jfr/recorder/storage/jfrStorage.cpp
> --- a/src/hotspot/share/jfr/recorder/storage/jfrStorage.cpp    Thu Mar 05 16:46:24 2020 -0500
> +++ b/src/hotspot/share/jfr/recorder/storage/jfrStorage.cpp    Thu Mar 05 23:41:31 2020 +0100
> @@ -464,7 +464,6 @@
>
>   static void assert_flush_regular_precondition(ConstBufferPtr cur, const u1* const cur_pos, size_t used, size_t req, const Thread* t) {
>     assert(t != NULL, "invariant");
> -  assert(t->jfr_thread_local()->shelved_buffer() == NULL, "invariant");
>     assert(cur != NULL, "invariant");
>     assert(!cur->lease(), "invariant");
>     assert(cur_pos != NULL, "invariant");
> @@ -513,7 +512,6 @@
>         return cur;
>       }
>     }
> -  assert(t->jfr_thread_local()->shelved_buffer() == NULL, "invariant");
>     if (cur->free_size() >= req) {
>       // simplest case, no switching of buffers
>       if (used > 0) {
> @@ -524,6 +522,7 @@
>     }
>     // Going for a "larger-than-regular" buffer.
>     // Shelve the current buffer to make room for a temporary lease.
> +  assert(t->jfr_thread_local()->shelved_buffer() == NULL, "invariant");
>     t->jfr_thread_local()->shelve_buffer(cur);
>     return provision_large(cur, cur_pos, used, req, native, t);
>   }


More information about the hotspot-jfr-dev mailing list