1 # File: Stem/Event/Queue.pm
3 # This file is part of Stem.
4 # Copyright (C) 1999, 2000, 2001 Stem Systems, Inc.
6 # Stem is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
11 # Stem is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with Stem; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 # For a license to use the Stem under conditions other than those
21 # described here, to purchase support for this software, or to purchase a
22 # commercial warranty contract, please contact Stem Systems at:
24 # Stem Systems, Inc. 781-643-7504
25 # 79 Everett St. info@stemsystems.com
29 # this class provides a way to deliver certain events and messages
30 # synchronously with the main event loop. this is done by queueing the
31 # actual event/message and writing a byte down a special pipe used
32 # only inside this process. the other side of the pipe has a read
33 # event that when triggered will then deliver the queued
36 # when using Stem::Event::Signal you need to use this module as
37 # well. perl signals will be delivered (safely) between perl
38 # operations but they could then be delivered inside an executing
39 # event handler and that means possible corruption. so this module
40 # allows those signal events to be delivered by the event loop itself.
43 package Stem::Event::Queue ;
44 our @ISA = qw( Stem::Event ) ;
52 <<<<<<< HEAD:lib/Stem/Event/Queue.pm
53 my( $self, $queue_read, $queue_write, $queue_read_event, $queue_has_event ) ;
56 our @EXPORT = qw( mark_not_empty ) ;
57 >>>>>>> master:lib/Stem/Event/Queue.pm
59 sub _init_event_queue {
65 socketpair( $queue_read, $queue_write,
66 AF_UNIX, SOCK_STREAM, PF_UNSPEC ) || die <<DIE ;
67 can't create socketpair $!
70 #print fileno( $queue_read ), " FILENO\n" ;
73 $queue_read->blocking( 0 ) ;
74 $queue_read_event = Stem::Event::Read->new(
79 ref $queue_read_event or die <<DIE ;
80 can't create Stem::Event::Queue read event: $queue_read_event
87 my( $always_mark ) = @_ ;
89 # don't mark the queue if it is already marked and we aren't forced
90 # the signal queue always marks the queue
92 return if $queue_has_event && !$always_mark ;
94 syswrite( $queue_write, 'x' ) ;
96 $queue_has_event = 1 ;
101 sysread( $queue_read, my $buf, 10 ) ;
103 $queue_has_event = 0 ;
105 # Stem::Event::Plain::process_queue();
106 Stem::Event::Signal::process_signal_queue();
107 # Stem::Msg::process_queue() if defined &Stem::Msg::process_queue;