instance method
render_details
Ruby on Rails edge
Since v5.0.7.2 Private — implementation detail, not part of the public APISignature
render_details()
No documentation comment.
Parameters
-
reqreq
Source
# File actionpack/lib/action_dispatch/middleware/debug_locks.rb, line 50
def render_details
owners = ActiveSupport::Dependencies.interlock.raw_state do |raw_owners|
# The Interlock itself comes to a complete halt as long as this block is
# executing. That gives us a more consistent picture of everything, but creates
# a pretty strong Observer Effect.
#
# Most directly, that means we need to do as little as possible in this block.
# More widely, it means this middleware should remain a strictly diagnostic tool
# (to be used when something has gone wrong), and not for any sort of general
# monitoring.
raw_owners.each.with_index do |(owner, info), idx|
info[:index] = idx
info[:backtrace] = owner.backtrace
end
raw_owners
end
str = owners.map do |owner, info|
if info[:exclusive]
lock_state = +"Exclusive"
elsif info[:sharing] > 0
lock_state = +"Sharing"
lock_state << " x#{info[:sharing]}" if info[:sharing] > 1
else
lock_state = +"No lock"
end
if info[:waiting]
lock_state << " (yielded share)"
end
msg = +"#{owner.class} #{info[:index]} [0x#{owner.__id__.to_s(16)} #{owner_status(owner)}] #{lock_state}\n"
if info[:sleeper]
msg << " Waiting in #{info[:sleeper]}"
msg << " to #{info[:purpose].to_s.inspect}" unless info[:purpose].nil?
msg << "\n"
if info[:compatible]
compat = info[:compatible].map { |c| c == false ? "share" : c.to_s.inspect }
msg << " may be pre-empted for: #{compat.join(', ')}\n"
end
blockers = owners.values.select { |binfo| blocked_by?(info, binfo, owners.values) }
msg << " blocked by: #{blockers.map { |i| i[:index] }.join(', ')}\n" if blockers.any?
end
blockees = owners.values.select { |binfo| blocked_by?(binfo, info, owners.values) }
msg << " blocking: #{blockees.map { |i| i[:index] }.join(', ')}\n" if blockees.any?
msg << "\n#{info[:backtrace].join("\n")}\n" if info[:backtrace]
end.join("\n\n---\n\n\n")
[200, { Rack::CONTENT_TYPE => "text/plain; charset=#{ActionDispatch::Response.default_charset}",
Rack::CONTENT_LENGTH => str.size.to_s }, [str]]
end
Defined in actionpack/lib/action_dispatch/middleware/debug_locks.rb line 50
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActionDispatch::DebugLocks