This file is indexed.

/usr/lib/ruby/vendor_ruby/thread_safe/non_concurrent_cache_backend.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
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
module ThreadSafe
  class NonConcurrentCacheBackend
    # WARNING: all public methods of the class must operate on the @backend
    # directly without calling each other. This is important because of the
    # SynchronizedCacheBackend which uses a non-reentrant mutex for perfomance
    # reasons.
    def initialize(options = nil)
      @backend = {}
    end

    def [](key)
      @backend[key]
    end

    def []=(key, value)
      @backend[key] = value
    end

    def compute_if_absent(key)
      if NULL != (stored_value = @backend.fetch(key, NULL))
        stored_value
      else
        @backend[key] = yield
      end
    end

    def replace_pair(key, old_value, new_value)
      if pair?(key, old_value)
        @backend[key] = new_value
        true
      else
        false
      end
    end

    def replace_if_exists(key, new_value)
      if NULL != (stored_value = @backend.fetch(key, NULL))
        @backend[key] = new_value
        stored_value
      end
    end

    def compute_if_present(key)
      if NULL != (stored_value = @backend.fetch(key, NULL))
        store_computed_value(key, yield(stored_value))
      end
    end

    def compute(key)
      store_computed_value(key, yield(@backend[key]))
    end

    def merge_pair(key, value)
      if NULL == (stored_value = @backend.fetch(key, NULL))
        @backend[key] = value
      else
        store_computed_value(key, yield(stored_value))
      end
    end

    def get_and_set(key, value)
      stored_value = @backend[key]
      @backend[key] = value
      stored_value
    end

    def key?(key)
      @backend.key?(key)
    end

    def value?(value)
      @backend.value?(value)
    end

    def delete(key)
      @backend.delete(key)
    end

    def delete_pair(key, value)
      if pair?(key, value)
        @backend.delete(key)
        true
      else
        false
      end
    end

    def clear
      @backend.clear
      self
    end

    def each_pair
      dupped_backend.each_pair do |k, v|
        yield k, v
      end
      self
    end

    def size
      @backend.size
    end

    def get_or_default(key, default_value)
      @backend.fetch(key, default_value)
    end

    alias_method :_get, :[]
    alias_method :_set, :[]=
    private :_get, :_set
    private
    def initialize_copy(other)
      super
      @backend = {}
      self
    end

    def dupped_backend
      @backend.dup
    end

    def pair?(key, expected_value)
      NULL != (stored_value = @backend.fetch(key, NULL)) && expected_value.equal?(stored_value)
    end

    def store_computed_value(key, new_value)
      if new_value.nil?
        @backend.delete(key)
        nil
      else
        @backend[key] = new_value
      end
    end
  end
end