| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | package AnyEvent::Task::Util; | 
| 2 |  |  |  |  |  |  |  | 
| 3 | 29 |  |  | 29 |  | 112 | use common::sense; | 
|  | 29 |  |  |  |  | 27 |  | 
|  | 29 |  |  |  |  | 135 |  | 
| 4 |  |  |  |  |  |  |  | 
| 5 | 29 |  |  | 29 |  | 1115 | use AnyEvent::Util; | 
|  | 29 |  |  |  |  | 39 |  | 
|  | 29 |  |  |  |  | 6889 |  | 
| 6 |  |  |  |  |  |  |  | 
| 7 |  |  |  |  |  |  |  | 
| 8 |  |  |  |  |  |  | our @children_sockets; | 
| 9 |  |  |  |  |  |  |  | 
| 10 |  |  |  |  |  |  | sub fork_anyevent_subprocess { | 
| 11 | 28 |  |  | 28 | 0 | 52 | my ($code, %args) = @_; | 
| 12 |  |  |  |  |  |  |  | 
| 13 | 28 |  |  |  |  | 112 | my ($socka, $sockb) = AnyEvent::Util::portable_socketpair; | 
| 14 |  |  |  |  |  |  |  | 
| 15 | 28 | 50 |  |  |  | 1222 | die "No AnyEvent watchers should be created prior to forking (AE model: $AnyEvent::MODEL)" if defined $AnyEvent::MODEL; | 
| 16 | 28 |  |  |  |  | 19110 | my $pid = fork; | 
| 17 |  |  |  |  |  |  |  | 
| 18 | 28 | 50 |  |  |  | 919 | die "couldn't fork: $!" if !defined $pid; | 
| 19 |  |  |  |  |  |  |  | 
| 20 | 28 | 100 |  |  |  | 813 | if (!$pid) { | 
| 21 | 14 |  |  |  |  | 413 | close($socka); | 
| 22 |  |  |  |  |  |  |  | 
| 23 | 14 |  |  |  |  | 159 | AnyEvent::Util::close_all_fds_except 0, 1, 2, fileno($sockb), @{$args{dont_close_fds}}; | 
|  | 14 |  |  |  |  | 746 |  | 
| 24 |  |  |  |  |  |  |  | 
| 25 |  |  |  |  |  |  | ## If parent closes its side of the socket we should exit | 
| 26 | 14 |  |  | 14 |  | 7378 | my $watcher = AE::io $sockb, 0, sub { exit }; | 
|  | 14 |  |  |  |  | 21988215 |  | 
| 27 |  |  |  |  |  |  |  | 
| 28 | 14 |  |  |  |  | 60060 | $code->(); | 
| 29 |  |  |  |  |  |  |  | 
| 30 | 0 |  |  |  |  | 0 | die "AnyEvent::Task::Server->run should never return"; | 
| 31 |  |  |  |  |  |  | } | 
| 32 |  |  |  |  |  |  |  | 
| 33 | 14 |  |  |  |  | 227 | close $sockb; | 
| 34 |  |  |  |  |  |  |  | 
| 35 | 14 | 50 |  |  |  | 143 | return ($socka, $pid) if wantarray; | 
| 36 |  |  |  |  |  |  |  | 
| 37 | 14 |  |  |  |  | 156 | push @children_sockets, $socka; # keep reference alive | 
| 38 | 14 |  |  |  |  | 722 | return; | 
| 39 |  |  |  |  |  |  | } | 
| 40 |  |  |  |  |  |  |  | 
| 41 |  |  |  |  |  |  |  | 
| 42 |  |  |  |  |  |  |  | 
| 43 |  |  |  |  |  |  | 1; |