Mercurial > hg > graal-jvmci-8
comparison src/os/solaris/vm/thread_solaris.inline.hpp @ 23465:3ad3f93fe3d2
8130212: Thread::current() might access freed memory on Solaris
Reviewed-by: kvn, twisti, stuefe
author | dholmes |
---|---|
date | Mon, 07 Dec 2015 13:25:13 +0100 |
parents | c49dcaf78a65 |
children | b5f3a471e646 |
comparison
equal
deleted
inserted
replaced
23464:59eb74ac51f2 | 23465:3ad3f93fe3d2 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2002, 2015, 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. |
38 // ThreadLocalStorage::thread is warm -- it's called > 16K times in the same | 38 // ThreadLocalStorage::thread is warm -- it's called > 16K times in the same |
39 // period. Thread::current() now calls ThreadLocalStorage::thread() directly. | 39 // period. Thread::current() now calls ThreadLocalStorage::thread() directly. |
40 // For SPARC, to avoid excessive register window spill-fill faults, | 40 // For SPARC, to avoid excessive register window spill-fill faults, |
41 // we aggressively inline these routines. | 41 // we aggressively inline these routines. |
42 | 42 |
43 inline void ThreadLocalStorage::set_thread(Thread* thread) { | |
44 _thr_current = thread; | |
45 } | |
46 | |
43 inline Thread* ThreadLocalStorage::thread() { | 47 inline Thread* ThreadLocalStorage::thread() { |
44 // don't use specialized code if +UseMallocOnly -- may confuse Purify et al. | 48 return _thr_current; |
45 debug_only(if (UseMallocOnly) return get_thread_slow();); | |
46 | |
47 uintptr_t raw = pd_raw_thread_id(); | |
48 int ix = pd_cache_index(raw); | |
49 Thread* candidate = ThreadLocalStorage::_get_thread_cache[ix]; | |
50 if (candidate->self_raw_id() == raw) { | |
51 // hit | |
52 return candidate; | |
53 } else { | |
54 return ThreadLocalStorage::get_thread_via_cache_slowly(raw, ix); | |
55 } | |
56 } | 49 } |
57 | 50 |
58 #endif // OS_SOLARIS_VM_THREAD_SOLARIS_INLINE_HPP | 51 #endif // OS_SOLARIS_VM_THREAD_SOLARIS_INLINE_HPP |