43 lines
737 B
Ruby
43 lines
737 B
Ruby
|
module Rex
|
||
|
|
||
|
###
|
||
|
#
|
||
|
# This class provides a wrapper around Thread.new that can provide
|
||
|
# additional features if a corresponding thread provider is set.
|
||
|
#
|
||
|
###
|
||
|
|
||
|
class ThreadFactory
|
||
|
|
||
|
@@provider = nil
|
||
|
|
||
|
def self.provider=(val)
|
||
|
@@provider = val
|
||
|
end
|
||
|
|
||
|
def self.spawn(name, crit, *args, &block)
|
||
|
if @@provider
|
||
|
if block
|
||
|
return @@provider.spawn(name, crit, *args){ |*args_copy| block.call(*args_copy) }
|
||
|
else
|
||
|
return @@provider.spawn(name, crit, *args)
|
||
|
end
|
||
|
else
|
||
|
t = nil
|
||
|
if block
|
||
|
t = ::Thread.new(*args){ |*args_copy| block.call(*args_copy) }
|
||
|
else
|
||
|
t = ::Thread.new(*args)
|
||
|
end
|
||
|
t[:tm_name] = name
|
||
|
t[:tm_crit] = crit
|
||
|
t[:tm_time] = Time.now
|
||
|
t[:tm_call] = caller
|
||
|
return t
|
||
|
end
|
||
|
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|