diff options
Diffstat (limited to 'Queue.pm')
-rw-r--r-- | Queue.pm | 31 |
1 files changed, 21 insertions, 10 deletions
@@ -36,20 +36,31 @@ sub _build_queue { return Thread::Queue->new(); } -after enqueue => sub { - my ($self)=shift; - syswrite $self->pipes->[1],'0'; -}; +sub _pipe_write { + return syswrite $_[0]->pipes->[1],'0'; +} + +sub _pipe_read { + my $foo;sysread $_[0]->pipes->[0],$foo,1; + return $foo; +} + +sub event_fh { + return $_[0]->pipes->[0]; +} + +sub event_fileno { + return fileno($_[0]->event_fh); +} + +after enqueue => \&_pipe_write; -before dequeue => sub { - my ($self)=shift; - my $foo;sysread $self->pipes->[0],$foo,1; -}; +before dequeue => \&_pipe_read; sub add_watch { my ($self,$sub)=@_; - Glib::IO->add_watch(fileno($self->pipes->[0]),'in',$sub); + Glib::IO->add_watch($self->event_fileno,'in',$sub); } sub signal { @@ -58,7 +69,7 @@ sub signal { croak "Not signaling on an empty queue, would block" unless $self->pending; - syswrite $self->pipes->[1],'0'; + $self->_pipe_write(); } no Moose; |