182 JfrThreadLocal* const tl = thread->jfr_thread_local(); |
182 JfrThreadLocal* const tl = thread->jfr_thread_local(); |
183 assert(tl != NULL, "invariant"); |
183 assert(tl != NULL, "invariant"); |
184 assert(!tl->has_cached_stack_trace(), "invariant"); |
184 assert(!tl->has_cached_stack_trace(), "invariant"); |
185 JfrStackTrace stacktrace(tl->stackframes(), tl->stackdepth()); |
185 JfrStackTrace stacktrace(tl->stackframes(), tl->stackdepth()); |
186 stacktrace.record_safe(thread, skip); |
186 stacktrace.record_safe(thread, skip); |
187 assert(stacktrace.hash() != 0, "invariant"); |
187 const unsigned int hash = stacktrace.hash(); |
188 tl->set_cached_stack_trace_id(instance().add(stacktrace), stacktrace.hash()); |
188 if (hash != 0) { |
|
189 tl->set_cached_stack_trace_id(instance().add(stacktrace), hash); |
|
190 } |
189 } |
191 } |
190 |
192 |
191 traceid JfrStackTraceRepository::add_trace(const JfrStackTrace& stacktrace) { |
193 traceid JfrStackTraceRepository::add_trace(const JfrStackTrace& stacktrace) { |
192 MutexLocker lock(JfrStacktrace_lock, Mutex::_no_safepoint_check_flag); |
194 MutexLocker lock(JfrStacktrace_lock, Mutex::_no_safepoint_check_flag); |
193 const size_t index = stacktrace._hash % TABLE_SIZE; |
195 const size_t index = stacktrace._hash % TABLE_SIZE; |