--- a/hotspot/src/share/vm/oops/objArrayOop.cpp Wed Jun 18 14:21:28 2014 -0700
+++ b/hotspot/src/share/vm/oops/objArrayOop.cpp Thu Jun 19 11:16:10 2014 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,22 @@
#include "oops/objArrayOop.hpp"
#include "oops/oop.inline.hpp"
+oop objArrayOopDesc::atomic_compare_exchange_oop(int index, oop exchange_value,
+ oop compare_value) {
+ volatile HeapWord* dest;
+ if (UseCompressedOops) {
+ dest = (HeapWord*)obj_at_addr<narrowOop>(index);
+ } else {
+ dest = (HeapWord*)obj_at_addr<oop>(index);
+ }
+ oop res = oopDesc::atomic_compare_exchange_oop(exchange_value, dest, compare_value, true);
+ // update card mark if success
+ if (res == compare_value) {
+ update_barrier_set((void*)dest, exchange_value);
+ }
+ return res;
+}
+
#define ObjArrayOop_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \
\
int objArrayOopDesc::oop_iterate_range(OopClosureType* blk, int start, int end) { \