1312 }
1313
1314 void NonJavaThread::post_run() {
1315 JFR_ONLY(Jfr::on_thread_exit(this);)
1316 remove_from_the_list();
1317 // Ensure thread-local-storage is cleared before termination.
1318 Thread::clear_thread_current();
1319 }
1320
1321 // NamedThread -- non-JavaThread subclasses with multiple
1322 // uniquely named instances should derive from this.
1323 NamedThread::NamedThread() :
1324 NonJavaThread(),
1325 _name(NULL),
1326 _processed_thread(NULL),
1327 _gc_id(GCId::undefined())
1328 {}
1329
1330 NamedThread::~NamedThread() {
1331 FREE_C_HEAP_ARRAY(char, _name);
1332 _name = NULL;
1333 }
1334
1335 void NamedThread::set_name(const char* format, ...) {
1336 guarantee(_name == NULL, "Only get to set name once.");
1337 _name = NEW_C_HEAP_ARRAY(char, max_name_len, mtThread);
1338 va_list ap;
1339 va_start(ap, format);
1340 jio_vsnprintf(_name, max_name_len, format, ap);
1341 va_end(ap);
1342 }
1343
1344 void NamedThread::print_on(outputStream* st) const {
1345 st->print("\"%s\" ", name());
1346 Thread::print_on(st);
1347 st->cr();
1348 }
1349
1350
1351 // ======= WatcherThread ========
1352
|
1312 }
1313
1314 void NonJavaThread::post_run() {
1315 JFR_ONLY(Jfr::on_thread_exit(this);)
1316 remove_from_the_list();
1317 // Ensure thread-local-storage is cleared before termination.
1318 Thread::clear_thread_current();
1319 }
1320
1321 // NamedThread -- non-JavaThread subclasses with multiple
1322 // uniquely named instances should derive from this.
1323 NamedThread::NamedThread() :
1324 NonJavaThread(),
1325 _name(NULL),
1326 _processed_thread(NULL),
1327 _gc_id(GCId::undefined())
1328 {}
1329
1330 NamedThread::~NamedThread() {
1331 FREE_C_HEAP_ARRAY(char, _name);
1332 }
1333
1334 void NamedThread::set_name(const char* format, ...) {
1335 guarantee(_name == NULL, "Only get to set name once.");
1336 _name = NEW_C_HEAP_ARRAY(char, max_name_len, mtThread);
1337 va_list ap;
1338 va_start(ap, format);
1339 jio_vsnprintf(_name, max_name_len, format, ap);
1340 va_end(ap);
1341 }
1342
1343 void NamedThread::print_on(outputStream* st) const {
1344 st->print("\"%s\" ", name());
1345 Thread::print_on(st);
1346 st->cr();
1347 }
1348
1349
1350 // ======= WatcherThread ========
1351
|