< prev index next >

src/hotspot/share/gc/shared/workerDataArray.inline.hpp

Print this page
rev 57241 : imported patch 8235346-redo-memory-leak
rev 57242 : imported patch 8235341-workerdataarray-cleanup
rev 57243 : [mq]: 8235341-stefanj-review

@@ -28,11 +28,11 @@
 #include "gc/shared/workerDataArray.hpp"
 #include "memory/allocation.inline.hpp"
 #include "utilities/ostream.hpp"
 
 template <typename T>
-WorkerDataArray<T>::WorkerDataArray(uint length, const char* title, bool is_serial) :
+WorkerDataArray<T>::WorkerDataArray(const char* title, uint length, bool is_serial) :
  _data(NULL),
  _length(length),
  _title(title),
  _is_serial(is_serial) {
   assert(length > 0, "Must have some workers to store data for");

@@ -64,13 +64,15 @@
   }
   FREE_C_HEAP_ARRAY(T, _data);
 }
 
 template <typename T>
-void WorkerDataArray<T>::link_thread_work_items(WorkerDataArray<size_t>* thread_work_items, uint index) {
+void WorkerDataArray<T>::create_thread_work_items(const char* title, uint index, uint length_override) {
   assert(index < MaxThreadWorkItems, "Tried to access thread work item %u (max %u)", index, MaxThreadWorkItems);
-  _thread_work_items[index] = thread_work_items;
+  assert(_thread_work_items[index] == NULL, "Tried to overwrite existing thread work item");
+  uint length = length_override != 0 ? length_override : _length;
+  _thread_work_items[index] = new WorkerDataArray<size_t>(title, length);
 }
 
 template <typename T>
 void WorkerDataArray<T>::set_thread_work_item(uint worker_i, size_t value, uint index) {
   assert(index < MaxThreadWorkItems, "Tried to access thread work item %u (max %u)", index, MaxThreadWorkItems);
< prev index next >