mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-25 13:54:38 +02:00
8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
Ensure ensure correct initialization of compiler runtime Reviewed-by: kvn, twisti
This commit is contained in:
parent
7f46feeee2
commit
aef0d74e96
18 changed files with 386 additions and 265 deletions
|
@ -27,22 +27,25 @@
|
|||
|
||||
#include "ci/compilerInterface.hpp"
|
||||
|
||||
typedef void (*initializer)(void);
|
||||
|
||||
class AbstractCompiler : public CHeapObj<mtCompiler> {
|
||||
private:
|
||||
bool _is_initialized; // Mark whether compiler object is initialized
|
||||
volatile int _num_compiler_threads;
|
||||
|
||||
protected:
|
||||
volatile int _compiler_state;
|
||||
// Used for tracking global state of compiler runtime initialization
|
||||
enum { uninitialized, initializing, initialized };
|
||||
enum { uninitialized, initializing, initialized, failed, shut_down };
|
||||
|
||||
// This method will call the initialization method "f" once (per compiler class/subclass)
|
||||
// and do so without holding any locks
|
||||
void initialize_runtimes(initializer f, volatile int* state);
|
||||
// This method returns true for the first compiler thread that reaches that methods.
|
||||
// This thread will initialize the compiler runtime.
|
||||
bool should_perform_init();
|
||||
|
||||
public:
|
||||
AbstractCompiler() : _is_initialized(false) {}
|
||||
AbstractCompiler() : _compiler_state(uninitialized), _num_compiler_threads(0) {}
|
||||
|
||||
// This function determines the compiler thread that will perform the
|
||||
// shutdown of the corresponding compiler runtime.
|
||||
bool should_perform_shutdown();
|
||||
|
||||
// Name of this compiler
|
||||
virtual const char* name() = 0;
|
||||
|
@ -74,17 +77,18 @@ class AbstractCompiler : public CHeapObj<mtCompiler> {
|
|||
#endif // TIERED
|
||||
|
||||
// Customization
|
||||
virtual bool needs_stubs () = 0;
|
||||
virtual void initialize () = 0;
|
||||
|
||||
void mark_initialized() { _is_initialized = true; }
|
||||
bool is_initialized() { return _is_initialized; }
|
||||
|
||||
virtual void initialize() = 0;
|
||||
void set_num_compiler_threads(int num) { _num_compiler_threads = num; }
|
||||
int num_compiler_threads() { return _num_compiler_threads; }
|
||||
|
||||
// Get/set state of compiler objects
|
||||
bool is_initialized() { return _compiler_state == initialized; }
|
||||
bool is_failed () { return _compiler_state == failed;}
|
||||
void set_state (int state);
|
||||
void set_shut_down () { set_state(shut_down); }
|
||||
// Compilation entry point for methods
|
||||
virtual void compile_method(ciEnv* env,
|
||||
ciMethod* target,
|
||||
int entry_bci) {
|
||||
virtual void compile_method(ciEnv* env, ciMethod* target, int entry_bci) {
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue