Skip to content

Commit

Permalink
Assert stack is kept gc processed.
Browse files Browse the repository at this point in the history
  • Loading branch information
reinrich committed Nov 24, 2020
1 parent f09aaf9 commit 7f61dbe
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/hotspot/share/runtime/deoptimization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
#include "runtime/handles.inline.hpp"
#include "runtime/interfaceSupport.inline.hpp"
#include "runtime/jniHandles.inline.hpp"
#include "runtime/keepStackGCProcessed.hpp"
#include "runtime/objectMonitor.inline.hpp"
#include "runtime/safepointVerifiers.hpp"
#include "runtime/sharedRuntime.hpp"
Expand Down Expand Up @@ -1651,6 +1652,7 @@ void Deoptimization::revoke_for_object_deoptimization(JavaThread* deoptee_thread
return;
}
GrowableArray<Handle>* objects_to_revoke = new GrowableArray<Handle>();
assert(KeepStackGCProcessedMark::stack_is_kept_gc_processed(deoptee_thread), "must be");
// Collect monitors but only those with eliminated locking.
get_monitors_from_stack(objects_to_revoke, deoptee_thread, fr, map, true);

Expand Down
16 changes: 16 additions & 0 deletions src/hotspot/share/runtime/keepStackGCProcessed.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,19 @@ KeepStackGCProcessedMark::~KeepStackGCProcessedMark() {
void KeepStackGCProcessedMark::finish_processing() {
StackWatermarkSet::finish_processing(_jt, NULL /* context */, StackWatermarkKind::gc);
}

#ifdef ASSERT
bool KeepStackGCProcessedMark::stack_is_kept_gc_processed(JavaThread* jt) {
if (!Thread::current()->is_Java_thread()) {
assert(SafepointSynchronize::is_at_safepoint() && Thread::current()->is_VM_thread(),
"must be either Java thread or VM thread in a safepoint");
return true;
}
StackWatermark* our_watermark = StackWatermarkSet::get(JavaThread::current(), StackWatermarkKind::gc);
if (our_watermark == nullptr) {
return true;
}
StackWatermark* their_watermark = StackWatermarkSet::get(jt, StackWatermarkKind::gc);
return our_watermark->linked_watermark() == their_watermark;
}
#endif // ASSERT
2 changes: 2 additions & 0 deletions src/hotspot/share/runtime/keepStackGCProcessed.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ class KeepStackGCProcessedMark : public StackObj {
public:
KeepStackGCProcessedMark(JavaThread* jt);
~KeepStackGCProcessedMark();

static bool stack_is_kept_gc_processed(JavaThread* jt) NOT_DEBUG({ return true; }) ;
};


Expand Down
1 change: 1 addition & 0 deletions src/hotspot/share/runtime/stackWatermark.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ class StackWatermark : public CHeapObj<mtInternal> {
void set_next(StackWatermark* n) { _next = n; }

void link_watermark(StackWatermark* watermark);
DEBUG_ONLY(StackWatermark* linked_watermark() const { return _linked_watermark; })

uintptr_t watermark();
uintptr_t last_processed();
Expand Down

0 comments on commit 7f61dbe

Please sign in to comment.