< prev index next >

src/hotspot/share/runtime/threadSMR.hpp

Print this page
rev 47289 : eosterlund, stefank CR - refactor code into threadSMR.cpp and threadSMR.hpp
rev 47290 : eosterlund CR - need more inline fixes.
rev 47291 : eosterlund, stefank CR - more inline and style cleanups
rev 47292 : stefank, coleenp CR - refactor most JavaThreadIterator usage to use JavaThreadIteratorWithHandle.


 116     return _list;
 117   }
 118 
 119   template <class T>
 120   void threads_do(T *cl) const {
 121     return _list->threads_do(cl);
 122   }
 123 
 124   bool cv_internal_thread_to_JavaThread(jobject jthread, JavaThread ** jt_pp, oop * thread_oop_p);
 125 
 126   bool includes(JavaThread* p) {
 127     return _list->includes(p);
 128   }
 129 
 130   uint length() const {
 131     return _list->length();
 132   }
 133 };
 134 
 135 // This stack allocated JavaThreadIterator is used to walk the
 136 // specified ThreadsList.
 137 //





 138 class JavaThreadIterator : public StackObj {
 139   ThreadsList * _list;
 140   uint _index;
 141 
 142 public:
 143   JavaThreadIterator(ThreadsList *list) : _list(list), _index(0) {
 144     assert(list != NULL, "ThreadsList must not be NULL.");
 145   }
 146 
 147   JavaThread *first() {
 148     _index = 0;
 149     return _list->thread_at(_index);
 150   }
 151 
 152   uint length() const {
 153     return _list->length();
 154   }
 155 
 156   ThreadsList *list() const {
 157     return _list;
 158   }
 159 
 160   JavaThread *next() {
 161     if (++_index >= length()) {
 162       return NULL;
 163     }
 164     return _list->thread_at(_index);
 165   }
 166 };



































 167 
 168 #endif // SHARE_VM_RUNTIME_THREADSMR_HPP


 116     return _list;
 117   }
 118 
 119   template <class T>
 120   void threads_do(T *cl) const {
 121     return _list->threads_do(cl);
 122   }
 123 
 124   bool cv_internal_thread_to_JavaThread(jobject jthread, JavaThread ** jt_pp, oop * thread_oop_p);
 125 
 126   bool includes(JavaThread* p) {
 127     return _list->includes(p);
 128   }
 129 
 130   uint length() const {
 131     return _list->length();
 132   }
 133 };
 134 
 135 // This stack allocated JavaThreadIterator is used to walk the
 136 // specified ThreadsList using the following style:
 137 //
 138 //   JavaThreadIterator jti(t_list);
 139 //   for (JavaThread *jt = jti.first(); jt != NULL; jt = jti.next()) {
 140 //     ...
 141 //   }
 142 //
 143 class JavaThreadIterator : public StackObj {
 144   ThreadsList * _list;
 145   uint _index;
 146 
 147 public:
 148   JavaThreadIterator(ThreadsList *list) : _list(list), _index(0) {
 149     assert(list != NULL, "ThreadsList must not be NULL.");
 150   }
 151 
 152   JavaThread *first() {
 153     _index = 0;
 154     return _list->thread_at(_index);
 155   }
 156 
 157   uint length() const {
 158     return _list->length();
 159   }
 160 
 161   ThreadsList *list() const {
 162     return _list;
 163   }
 164 
 165   JavaThread *next() {
 166     if (++_index >= length()) {
 167       return NULL;
 168     }
 169     return _list->thread_at(_index);
 170   }
 171 };
 172 
 173 // This stack allocated ThreadsListHandle and JavaThreadIterator combo
 174 // is used to walk the ThreadsList in the included ThreadsListHandle
 175 // using the following style:
 176 //
 177 //   for (JavaThreadIteratorWithHandle jtiwh; JavaThread *jt = jtiwh.next(); ) {
 178 //     ...
 179 //   }
 180 //
 181 class JavaThreadIteratorWithHandle : public StackObj {
 182   ThreadsListHandle _tlh;
 183   uint _index;
 184 
 185 public:
 186   JavaThreadIteratorWithHandle() : _tlh(), _index(0) {}
 187 
 188   uint length() const {
 189     return _tlh.length();
 190   }
 191 
 192   ThreadsList *list() const {
 193     return _tlh.list();
 194   }
 195 
 196   JavaThread *next() {
 197     if (_index >= length()) {
 198       return NULL;
 199     }
 200     return _tlh.list()->thread_at(_index++);
 201   }
 202 
 203   void rewind() {
 204     _index = 0;
 205   }
 206 };
 207 
 208 #endif // SHARE_VM_RUNTIME_THREADSMR_HPP
< prev index next >