OXIESEC PANEL
- Current Dir:
/
/
usr
/
lib
/
ruby
/
vendor_ruby
/
rake
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
03/05/2020 06:33:15 AM
rwxr-xr-x
📄
application.rb
24.5 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
backtrace.rb
896 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
clean.rb
2.03 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
cloneable.rb
448 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
cpu_counter.rb
2.32 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
default_loader.rb
265 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
dsl_definition.rb
5.48 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
early_time.rb
370 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📁
ext
-
03/05/2020 06:33:15 AM
rwxr-xr-x
📄
file_creation_task.rb
700 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
file_list.rb
12.45 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
file_task.rb
1.5 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
file_utils.rb
3.8 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
file_utils_ext.rb
4.08 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
invocation_chain.rb
1.19 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
invocation_exception_mixin.rb
461 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
late_time.rb
295 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
linked_list.rb
2.77 KB
03/03/2020 01:44:04 PM
rw-r--r--
📁
loaders
-
03/05/2020 06:33:15 AM
rwxr-xr-x
📄
multi_task.rb
345 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
name_space.rb
702 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
packagetask.rb
5.57 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
phony.rb
381 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
private_reader.rb
394 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
promise.rb
2.28 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
pseudo_status.rb
405 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
rake_module.rb
1.49 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
rake_test_loader.rb
505 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
rule_recursion_overflow_error.rb
382 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
scope.rb
899 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
task.rb
11.96 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
task_argument_error.rb
149 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
task_arguments.rb
2.41 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
task_manager.rb
9.58 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
tasklib.rb
165 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
testtask.rb
5.85 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
thread_history_display.rb
1.13 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
thread_pool.rb
4.67 KB
03/03/2020 01:44:04 PM
rw-r--r--
📄
trace_output.rb
575 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
version.rb
208 bytes
03/03/2020 01:44:04 PM
rw-r--r--
📄
win32.rb
1.52 KB
03/03/2020 01:44:04 PM
rw-r--r--
Editing: thread_pool.rb
Close
# frozen_string_literal: true require "set" require "rake/promise" module Rake class ThreadPool # :nodoc: all # Creates a ThreadPool object. The +thread_count+ parameter is the size # of the pool. def initialize(thread_count) @max_active_threads = [thread_count, 0].max @threads = Set.new @threads_mon = Monitor.new @queue = Queue.new @join_cond = @threads_mon.new_cond @history_start_time = nil @history = [] @history_mon = Monitor.new @total_threads_in_play = 0 end # Creates a future executed by the +ThreadPool+. # # The args are passed to the block when executing (similarly to # Thread#new) The return value is an object representing # a future which has been created and added to the queue in the # pool. Sending #value to the object will sleep the # current thread until the future is finished and will return the # result (or raise an exception thrown from the future) def future(*args, &block) promise = Promise.new(args, &block) promise.recorder = lambda { |*stats| stat(*stats) } @queue.enq promise stat :queued, item_id: promise.object_id start_thread promise end # Waits until the queue of futures is empty and all threads have exited. def join @threads_mon.synchronize do begin stat :joining @join_cond.wait unless @threads.empty? stat :joined rescue Exception => e stat :joined $stderr.puts e $stderr.print "Queue contains #{@queue.size} items. " + "Thread pool contains #{@threads.count} threads\n" $stderr.print "Current Thread #{Thread.current} status = " + "#{Thread.current.status}\n" $stderr.puts e.backtrace.join("\n") @threads.each do |t| $stderr.print "Thread #{t} status = #{t.status}\n" $stderr.puts t.backtrace.join("\n") end raise e end end end # Enable the gathering of history events. def gather_history #:nodoc: @history_start_time = Time.now if @history_start_time.nil? end # Return a array of history events for the thread pool. # # History gathering must be enabled to be able to see the events # (see #gather_history). Best to call this when the job is # complete (i.e. after ThreadPool#join is called). def history # :nodoc: @history_mon.synchronize { @history.dup }. sort_by { |i| i[:time] }. each { |i| i[:time] -= @history_start_time } end # Return a hash of always collected statistics for the thread pool. def statistics # :nodoc: { total_threads_in_play: @total_threads_in_play, max_active_threads: @max_active_threads, } end private # processes one item on the queue. Returns true if there was an # item to process, false if there was no item def process_queue_item #:nodoc: return false if @queue.empty? # Even though we just asked if the queue was empty, it # still could have had an item which by this statement # is now gone. For this reason we pass true to Queue#deq # because we will sleep indefinitely if it is empty. promise = @queue.deq(true) stat :dequeued, item_id: promise.object_id promise.work return true rescue ThreadError # this means the queue is empty false end def safe_thread_count @threads_mon.synchronize do @threads.count end end def start_thread # :nodoc: @threads_mon.synchronize do next unless @threads.count < @max_active_threads t = Thread.new do begin while safe_thread_count <= @max_active_threads break unless process_queue_item end ensure @threads_mon.synchronize do @threads.delete Thread.current stat :ended, thread_count: @threads.count @join_cond.broadcast if @threads.empty? end end end @threads << t stat( :spawned, new_thread: t.object_id, thread_count: @threads.count) @total_threads_in_play = @threads.count if @threads.count > @total_threads_in_play end end def stat(event, data=nil) # :nodoc: return if @history_start_time.nil? info = { event: event, data: data, time: Time.now, thread: Thread.current.object_id, } @history_mon.synchronize { @history << info } end # for testing only def __queue__ # :nodoc: @queue end end end