Class: Foobara::WeakObjectSet::GarbageCleaner

Inherits:
Object
  • Object
show all
Defined in:
foobara-0.0.130/projects/weak_object_set/src/weak_object_set.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(weak_object_set, queue) ⇒ GarbageCleaner

Returns a new instance of GarbageCleaner.



12
13
14
15
16
17
# File 'foobara-0.0.130/projects/weak_object_set/src/weak_object_set.rb', line 12

def initialize(weak_object_set, queue)
  self.queue = queue
  self.weak_object_set = weak_object_set

  start_cleanup_thread
end

Instance Attribute Details

#cleanup_threadObject

Returns the value of attribute cleanup_thread.



10
11
12
# File 'foobara-0.0.130/projects/weak_object_set/src/weak_object_set.rb', line 10

def cleanup_thread
  @cleanup_thread
end

#deactivatedObject

Returns the value of attribute deactivated.



10
11
12
# File 'foobara-0.0.130/projects/weak_object_set/src/weak_object_set.rb', line 10

def deactivated
  @deactivated
end

#queueObject

Returns the value of attribute queue.



10
11
12
# File 'foobara-0.0.130/projects/weak_object_set/src/weak_object_set.rb', line 10

def queue
  @queue
end

#weak_object_setObject

Returns the value of attribute weak_object_set.



10
11
12
# File 'foobara-0.0.130/projects/weak_object_set/src/weak_object_set.rb', line 10

def weak_object_set
  @weak_object_set
end

Instance Method Details

#cleanup_procObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'foobara-0.0.130/projects/weak_object_set/src/weak_object_set.rb', line 19

def cleanup_proc
  @cleanup_proc ||= begin
    queue = self.queue

    ->(object_id) do
      unless deactivated?
        begin
          queue.push(object_id)
        rescue ClosedQueueError
          # :nocov:
          deactivate
          # :nocov:
        end
      end
    end
  end
end

#deactivateObject



59
60
61
62
63
# File 'foobara-0.0.130/projects/weak_object_set/src/weak_object_set.rb', line 59

def deactivate
  self.deactivated = true
  queue.close
  cleanup_thread.join # just doing this for test suite/simplecov
end

#deactivated?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'foobara-0.0.130/projects/weak_object_set/src/weak_object_set.rb', line 65

def deactivated?
  deactivated
end

#start_cleanup_threadObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'foobara-0.0.130/projects/weak_object_set/src/weak_object_set.rb', line 37

def start_cleanup_thread
  self.cleanup_thread = Thread.new do
    loop do
      object_id = queue.pop
      if object_id
        weak_object_set.delete(object_id)
      elsif queue.closed?
        self.queue = nil
        break
      else
        # :nocov:
        raise "Unexpected nil value in the queue"
        # :nocov:
      end
    end
  end
end

#track(object) ⇒ Object



55
56
57
# File 'foobara-0.0.130/projects/weak_object_set/src/weak_object_set.rb', line 55

def track(object)
  ObjectSpace.define_finalizer(object, cleanup_proc)
end