8050972: Concurrency problem in PcDesc cache
The entries of the PcDesc cache in nmethods are not declared as volatile, but they are accessed and modified by several threads concurrently. Reviewed-by: kvn, dholmes, dcubed
This commit is contained in:
parent
33058abb3f
commit
1439e307db
@ -69,7 +69,12 @@ class PcDescCache VALUE_OBJ_CLASS_SPEC {
|
||||
friend class VMStructs;
|
||||
private:
|
||||
enum { cache_size = 4 };
|
||||
PcDesc* _pc_descs[cache_size]; // last cache_size pc_descs found
|
||||
// The array elements MUST be volatile! Several threads may modify
|
||||
// and read from the cache concurrently. find_pc_desc_internal has
|
||||
// returned wrong results. C++ compiler (namely xlC12) may duplicate
|
||||
// C++ field accesses if the elements are not volatile.
|
||||
typedef PcDesc* PcDescPtr;
|
||||
volatile PcDescPtr _pc_descs[cache_size]; // last cache_size pc_descs found
|
||||
public:
|
||||
PcDescCache() { debug_only(_pc_descs[0] = NULL); }
|
||||
void reset_to(PcDesc* initial_pc_desc);
|
||||
|
Loading…
x
Reference in New Issue
Block a user