Mercurial > hg > truffle
comparison src/share/vm/runtime/task.cpp @ 10405:f2110083203d
8005849: JEP 167: Event-Based JVM Tracing
Reviewed-by: acorn, coleenp, sla
Contributed-by: Karen Kinnear <karen.kinnear@oracle.com>, Bengt Rutisson <bengt.rutisson@oracle.com>, Calvin Cheung <calvin.cheung@oracle.com>, Erik Gahlin <erik.gahlin@oracle.com>, Erik Helin <erik.helin@oracle.com>, Jesper Wilhelmsson <jesper.wilhelmsson@oracle.com>, Keith McGuigan <keith.mcguigan@oracle.com>, Mattias Tobiasson <mattias.tobiasson@oracle.com>, Markus Gronlund <markus.gronlund@oracle.com>, Mikael Auno <mikael.auno@oracle.com>, Nils Eliasson <nils.eliasson@oracle.com>, Nils Loodin <nils.loodin@oracle.com>, Rickard Backman <rickard.backman@oracle.com>, Staffan Larsen <staffan.larsen@oracle.com>, Stefan Karlsson <stefan.karlsson@oracle.com>, Yekaterina Kantserova <yekaterina.kantserova@oracle.com>
author | sla |
---|---|
date | Mon, 10 Jun 2013 11:30:51 +0200 |
parents | f34d701e952e |
children | 606acabe7b5c |
comparison
equal
deleted
inserted
replaced
10404:d0add7016434 | 10405:f2110083203d |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
112 | 112 |
113 PeriodicTask::~PeriodicTask() { | 113 PeriodicTask::~PeriodicTask() { |
114 disenroll(); | 114 disenroll(); |
115 } | 115 } |
116 | 116 |
117 /* enroll could be called from a JavaThread, so we have to check for | |
118 * safepoint when taking the lock to avoid deadlocking */ | |
117 void PeriodicTask::enroll() { | 119 void PeriodicTask::enroll() { |
118 MutexLockerEx ml(PeriodicTask_lock->owned_by_self() ? | 120 MutexLockerEx ml(PeriodicTask_lock->owned_by_self() ? |
119 NULL : PeriodicTask_lock, Mutex::_no_safepoint_check_flag); | 121 NULL : PeriodicTask_lock); |
120 | 122 |
121 if (_num_tasks == PeriodicTask::max_tasks) { | 123 if (_num_tasks == PeriodicTask::max_tasks) { |
122 fatal("Overflow in PeriodicTask table"); | 124 fatal("Overflow in PeriodicTask table"); |
123 } | 125 } |
124 _tasks[_num_tasks++] = this; | 126 _tasks[_num_tasks++] = this; |
129 } else { | 131 } else { |
130 WatcherThread::start(); | 132 WatcherThread::start(); |
131 } | 133 } |
132 } | 134 } |
133 | 135 |
136 /* disenroll could be called from a JavaThread, so we have to check for | |
137 * safepoint when taking the lock to avoid deadlocking */ | |
134 void PeriodicTask::disenroll() { | 138 void PeriodicTask::disenroll() { |
135 MutexLockerEx ml(PeriodicTask_lock->owned_by_self() ? | 139 MutexLockerEx ml(PeriodicTask_lock->owned_by_self() ? |
136 NULL : PeriodicTask_lock, Mutex::_no_safepoint_check_flag); | 140 NULL : PeriodicTask_lock); |
137 | 141 |
138 int index; | 142 int index; |
139 for(index = 0; index < _num_tasks && _tasks[index] != this; index++) | 143 for(index = 0; index < _num_tasks && _tasks[index] != this; index++) |
140 ; | 144 ; |
141 | 145 |