202: def initvars
203: @lexer = Puppet::Parser::Lexer.new()
204: @files = {}
205: @loaded = []
206: @loading = {}
207: @loading.extend(MonitorMixin)
208: class << @loading
209: def done_with(item)
210: synchronize do
211: delete(item)[:busy].signal if self.has_key?(item) and self[item][:loader] == Thread.current
212: end
213: end
214: def owner_of(item)
215: synchronize do
216: if !self.has_key? item
217: self[item] = { :loader => Thread.current, :busy => self.new_cond}
218: :nobody
219: elsif self[item][:loader] == Thread.current
220: :this_thread
221: else
222: flag = self[item][:busy]
223: flag.wait
224: flag.signal
225: :another_thread
226: end
227: end
228: end
229: end
230: end