43 lines
733 B
Ruby
43 lines
733 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
|