Async::Container SourceAsyncContainerThreadInstance

class Instance

Represents a running child thread from the point of view of the child thread.

Definitions

def self.for(thread)

Wrap an instance around the class Async::Container::Thread instance from within the threaded child.

Signature

parameter thread Thread

The thread intance to wrap.

Implementation

def self.for(thread)
	instance = self.new(thread.out)
	
	return instance
end

def name= value

Set the name of the thread.

Signature

parameter value String

The name to set.

Implementation

def name= value
	@thread.name = value
end

def name

Get the name of the thread.

Signature

returns String

Implementation

def name
	@thread.name
end

def exec(*arguments, ready: true, **options)

Execute a child process using ::Process.spawn. In order to simulate ::Process.exec, an class Async::Container::Thread::Exit instance is raised to propagage exit status. This creates the illusion that this method does not return (normally).

Implementation

def exec(*arguments, ready: true, **options)
	if ready
		self.ready!(status: "(spawn)") if ready
	else
		self.before_spawn(arguments, options)
	end
	
	begin
		# TODO prefer **options... but it doesn't support redirections on < 2.7
		pid = ::Process.spawn(*arguments, options)
	ensure
		_, status = ::Process.wait2(pid)
		
		raise Exit, status
	end
end