summaryrefslogtreecommitdiff
path: root/lib/Thread/Task
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Thread/Task')
-rw-r--r--lib/Thread/Task/Handle.pm8
-rw-r--r--lib/Thread/Task/Manager.pm2
-rw-r--r--lib/Thread/Task/Types.pm6
3 files changed, 13 insertions, 3 deletions
diff --git a/lib/Thread/Task/Handle.pm b/lib/Thread/Task/Handle.pm
index 5dfcd40..5cb2eed 100644
--- a/lib/Thread/Task/Handle.pm
+++ b/lib/Thread/Task/Handle.pm
@@ -7,6 +7,7 @@ class Thread::Task::Handle {
use MooseX::Types::Moose qw(ClassName Int ArrayRef);
use Thread::Task::Types qw(Handle_T Worker_T Task_T Finished_ET);
use Thread::Task::Exception::Finished;
+ use MooseX::MultiMethods;
require Scalar::Util;
@@ -16,7 +17,6 @@ class Thread::Task::Handle {
isa => Int,
is => 'ro',
default => sub { ++$SEQUENCE },
- init_arg => undef,
);
has task => (
@@ -32,6 +32,10 @@ class Thread::Task::Handle {
init_arg => undef,
);
+ multi method BUILDARGS(ClassName $class: Task_T $task) {
+ return $class->next::method({task=>$task});
+ }
+
method prepare() {
try {
$self->task->prepare;
@@ -86,7 +90,7 @@ class Thread::Task::Handle {
return $class->new(
hid=>$hid,
- task=>Thread::Task->from_string($task_serialized),
+ task=>$task_class->from_string($task_serialized),
);
}
diff --git a/lib/Thread/Task/Manager.pm b/lib/Thread/Task/Manager.pm
index f94aba6..1410799 100644
--- a/lib/Thread/Task/Manager.pm
+++ b/lib/Thread/Task/Manager.pm
@@ -183,7 +183,7 @@ class Thread::Task::Manager {
method on_signal(Str $frozen) {
my $message;
try {
- $message = Storable::nthaw($frozen);
+ $message = Storable::thaw($frozen);
}
catch {
return;
diff --git a/lib/Thread/Task/Types.pm b/lib/Thread/Task/Types.pm
index 8a4d044..9ee87ed 100644
--- a/lib/Thread/Task/Types.pm
+++ b/lib/Thread/Task/Types.pm
@@ -5,15 +5,21 @@ use MooseX::Types
Handle_T
Worker_T
Task_T
+ TaskRev_T
+ Manager_T
Conduit_T
Finished_ET
Queue_T
Queue_Ev_T
)];
+use MooseX::Types::Moose qw(Int);
class_type Handle_T, { class => 'Thread::Task::Handle' };
class_type Worker_T, { class => 'Thread::Task::Worker' };
class_type Task_T, { class => 'Thread::Task' };
+class_type Manager_T, { class => 'Thread::Task::Manager' };
+
+subtype TaskRev_T, as Int;
role_type Conduit_T, { role => 'Thread::Task::Role::Conduit' };