sub killThread{ my $self = shift; { lock $self->{threadDone}; $self->{threadDone} = 1; } return $self->{thread}; } sub manageQueue{ my $self = shift; while(1){ my $done; { lock $self->{threadDone}; $done = $self->{threadDone}; } my $amtInQ = $queue->pending(); last if $done && $amtInQ == 0; ...