Mercurial > hg > graal-jvmci-8
comparison src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp @ 17947:1772223a25a2
8037112: gc/g1/TestHumongousAllocInitialMark.java caused SIGSEGV
Reviewed-by: brutisso, mgerdin
author | pliden |
---|---|
date | Fri, 11 Apr 2014 11:00:12 +0200 |
parents | 595c0f60d50d |
children |
comparison
equal
deleted
inserted
replaced
17946:997fd9660dd5 | 17947:1772223a25a2 |
---|---|
33 const size_t G1StringDedupQueue::_max_size = 1000000; // Max number of elements per queue | 33 const size_t G1StringDedupQueue::_max_size = 1000000; // Max number of elements per queue |
34 const size_t G1StringDedupQueue::_max_cache_size = 0; // Max cache size per queue | 34 const size_t G1StringDedupQueue::_max_cache_size = 0; // Max cache size per queue |
35 | 35 |
36 G1StringDedupQueue::G1StringDedupQueue() : | 36 G1StringDedupQueue::G1StringDedupQueue() : |
37 _cursor(0), | 37 _cursor(0), |
38 _cancel(false), | |
38 _empty(true), | 39 _empty(true), |
39 _dropped(0) { | 40 _dropped(0) { |
40 _nqueues = MAX2(ParallelGCThreads, (size_t)1); | 41 _nqueues = MAX2(ParallelGCThreads, (size_t)1); |
41 _queues = NEW_C_HEAP_ARRAY(G1StringDedupWorkerQueue, _nqueues, mtGC); | 42 _queues = NEW_C_HEAP_ARRAY(G1StringDedupWorkerQueue, _nqueues, mtGC); |
42 for (size_t i = 0; i < _nqueues; i++) { | 43 for (size_t i = 0; i < _nqueues; i++) { |
53 _queue = new G1StringDedupQueue(); | 54 _queue = new G1StringDedupQueue(); |
54 } | 55 } |
55 | 56 |
56 void G1StringDedupQueue::wait() { | 57 void G1StringDedupQueue::wait() { |
57 MonitorLockerEx ml(StringDedupQueue_lock, Mutex::_no_safepoint_check_flag); | 58 MonitorLockerEx ml(StringDedupQueue_lock, Mutex::_no_safepoint_check_flag); |
58 while (_queue->_empty) { | 59 while (_queue->_empty && !_queue->_cancel) { |
59 ml.wait(Mutex::_no_safepoint_check_flag); | 60 ml.wait(Mutex::_no_safepoint_check_flag); |
60 } | 61 } |
62 } | |
63 | |
64 void G1StringDedupQueue::cancel_wait() { | |
65 MonitorLockerEx ml(StringDedupQueue_lock, Mutex::_no_safepoint_check_flag); | |
66 _queue->_cancel = true; | |
67 ml.notify(); | |
61 } | 68 } |
62 | 69 |
63 void G1StringDedupQueue::push(uint worker_id, oop java_string) { | 70 void G1StringDedupQueue::push(uint worker_id, oop java_string) { |
64 assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint"); | 71 assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint"); |
65 assert(worker_id < _queue->_nqueues, "Invalid queue"); | 72 assert(worker_id < _queue->_nqueues, "Invalid queue"); |