Module: HeapScope::Fibers

Defined in:
lib/heapscope/closures.rb

Overview

Fiber / execution-context awareness (best-effort).

Class Method Summary collapse

Class Method Details

.fiber_info(fiber) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/heapscope/closures.rb', line 84

def fiber_info(fiber)
  storage =
    if fiber.respond_to?(:storage)
      fiber.storage
    else
      {}
    end
  {
    object_id: fiber.__id__,
    alive: (fiber.alive? if fiber.respond_to?(:alive?)),
    storage_keys: storage.respond_to?(:keys) ? storage.keys.map(&:inspect) : [],
    storage_size: storage.respond_to?(:size) ? storage.size : nil,
    note: "Fiber-local storage support varies by Ruby version."
  }
rescue StandardError => e
  { error: e.message }
end

.inventoryObject



70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/heapscope/closures.rb', line 70

def inventory
  list = []
  if defined?(Fiber) && Fiber.respond_to?(:list)
    Fiber.list.each do |fiber|
      list << fiber_info(fiber)
    end
  elsif defined?(Fiber)
    list << fiber_info(Fiber.current)
  end
  list
rescue StandardError => e
  [{ error: e.message }]
end