This file is indexed.

/usr/lib/ruby/vendor_ruby/thread_safe/util/volatile.rb is in ruby-thread-safe 0.3.6-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
module ThreadSafe
  module Util
    module Volatile
      # Provides +volatile+ (in the JVM's sense) attribute accessors implemented
      # atop of the +AtomicReference+s.
      #
      # Usage:
      #   class Foo
      #     extend ThreadSafe::Util::Volatile
      #     attr_volatile :foo, :bar
      #
      #     def initialize(bar)
      #       super() # must super() into parent initializers before using the volatile attribute accessors
      #       self.bar = bar
      #     end
      #
      #     def hello
      #       my_foo = foo # volatile read
      #       self.foo = 1 # volatile write
      #       cas_foo(1, 2) # => true | a strong CAS
      #     end
      #   end
      def attr_volatile(*attr_names)
        return if attr_names.empty?
        include(Module.new do
          atomic_ref_setup = attr_names.map {|attr_name| "@__#{attr_name} = ThreadSafe::Util::AtomicReference.new"}
          initialize_copy_setup = attr_names.zip(atomic_ref_setup).map do |attr_name, ref_setup|
            "#{ref_setup}(other.instance_variable_get(:@__#{attr_name}).get)"
          end
          class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
            def initialize(*)
              super
              #{atomic_ref_setup.join('; ')}
            end

            def initialize_copy(other)
              super
              #{initialize_copy_setup.join('; ')}
            end
          RUBY_EVAL

          attr_names.each do |attr_name|
            class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
              def #{attr_name}
                @__#{attr_name}.get
              end

              def #{attr_name}=(value)
                @__#{attr_name}.set(value)
              end

              def compare_and_set_#{attr_name}(old_value, new_value)
                @__#{attr_name}.compare_and_set(old_value, new_value)
              end
            RUBY_EVAL

            alias_method :"cas_#{attr_name}", :"compare_and_set_#{attr_name}"
            alias_method :"lazy_set_#{attr_name}", :"#{attr_name}="
          end
        end)
      end
    end
  end
end