@@ -15,9 +15,6 @@ use IO::Handle ();
15
15
16
16
BEGIN {
17
17
eval " use Time::HiRes qw (alarm);" ;
18
-
19
- # so it'll bomb during tests on Solaris, until we make it work
20
- $_ = MSG_NOSIGNAL;
21
18
}
22
19
23
20
# flag definitions
@@ -27,11 +24,13 @@ use constant F_COMPRESS => 2;
27
24
# size savings required before saving compressed value
28
25
use constant COMPRESS_SAVINGS => 0.20; # percent
29
26
30
- use vars qw( $VERSION $HAVE_ZLIB) ;
27
+ use vars qw( $VERSION $HAVE_ZLIB $FLAG_NOSIGNAL ) ;
31
28
$VERSION = " 1.0.12-pre" ;
32
29
30
+ $FLAG_NOSIGNAL = 0;
33
31
BEGIN {
34
32
$HAVE_ZLIB = eval " use Compress::Zlib (); 1;" ;
33
+ $FLAG_NOSIGNAL = eval { MSG_NOSIGNAL } || 0;
35
34
}
36
35
37
36
my %host_dead ; # host -> unixtime marked dead until
@@ -218,10 +217,11 @@ sub delete {
218
217
my $cmd = " delete $key$time \r\n " ;
219
218
my $res = " " ;
220
219
220
+ local $SIG {' PIPE' } = " IGNORE" unless $FLAG_NOSIGNAL ;
221
221
local $SIG {' ALRM' } = sub { _dead_sock($sock ); die " alarm" ; };
222
222
alarm($SOCK_TIMEOUT );
223
223
eval {
224
- send ($sock , $cmd , MSG_NOSIGNAL ) ?
224
+ send ($sock , $cmd , $FLAG_NOSIGNAL ) ?
225
225
($res = readline($sock )) :
226
226
_dead_sock($sock );
227
227
alarm(0);
@@ -277,11 +277,12 @@ sub _set {
277
277
278
278
$exptime = int ($exptime || 0);
279
279
280
+ local $SIG {' PIPE' } = " IGNORE" unless $FLAG_NOSIGNAL ;
280
281
local $SIG {' ALRM' } = sub { _dead_sock($sock ); die " alarm" ; };
281
282
alarm($SOCK_TIMEOUT );
282
283
my ($res , $line ) = (0, " " );
283
284
eval {
284
- $res = send ($sock , " $cmdname $key $flags $exptime $len \r\n $val \r\n " , MSG_NOSIGNAL );
285
+ $res = send ($sock , " $cmdname $key $flags $exptime $len \r\n $val \r\n " , $FLAG_NOSIGNAL );
285
286
if ($res ) {
286
287
$line = readline($sock );
287
288
$res = $line eq " STORED\r\n " ;
@@ -316,11 +317,12 @@ sub _incrdecr {
316
317
$self -> {' stats' }-> {$cmdname }++;
317
318
$value = 1 unless defined $value ;
318
319
320
+ local $SIG {' PIPE' } = " IGNORE" unless $FLAG_NOSIGNAL ;
319
321
local $SIG {' ALRM' } = sub { _dead_sock($sock ); die " alarm" ; };
320
322
alarm($SOCK_TIMEOUT );
321
323
my $line ;
322
324
eval {
323
- send ($sock , " $cmdname $key $value \r\n " , MSG_NOSIGNAL ) ?
325
+ send ($sock , " $cmdname $key $value \r\n " , $FLAG_NOSIGNAL ) ?
324
326
$line = readline($sock ) :
325
327
_dead_sock($sock );
326
328
alarm(0);
@@ -342,10 +344,11 @@ sub get {
342
344
343
345
my %val ;
344
346
347
+ local $SIG {' PIPE' } = " IGNORE" unless $FLAG_NOSIGNAL ;
345
348
local $SIG {' ALRM' } = sub { _dead_sock($sock ); die " alarm" ; };
346
349
alarm($SOCK_TIMEOUT );
347
350
eval {
348
- send ($sock , " get $key \r\n " , MSG_NOSIGNAL ) ?
351
+ send ($sock , " get $key \r\n " , $FLAG_NOSIGNAL ) ?
349
352
_load_items($sock , \%val ) :
350
353
_dead_sock($sock , undef );
351
354
alarm(0);
@@ -381,6 +384,7 @@ sub get_multi {
381
384
$self -> {' stats' }-> {" get_keys" } += @_ ;
382
385
$self -> {' stats' }-> {" get_socks" } += @socks ;
383
386
387
+ local $SIG {' PIPE' } = " IGNORE" unless $FLAG_NOSIGNAL ;
384
388
local $SIG {' ALRM' } = sub { _dead_sock($sock ); die " alarm" ; };
385
389
386
390
# pass 1: send out requests
@@ -389,7 +393,7 @@ sub get_multi {
389
393
alarm($SOCK_TIMEOUT );
390
394
foreach my $sock (@socks ) {
391
395
eval {
392
- if (send ($sock , " get @{$sock_keys {$sock }}\r\n " , MSG_NOSIGNAL )) {
396
+ if (send ($sock , " get @{$sock_keys {$sock }}\r\n " , $FLAG_NOSIGNAL )) {
393
397
push @gather , $sock ;
394
398
} else {
395
399
_dead_sock($sock );
@@ -470,10 +474,11 @@ sub run_command {
470
474
my ($sock , $cmd ) = @_ ;
471
475
return () unless $sock ;
472
476
my @ret ;
477
+ local $SIG {' PIPE' } = " IGNORE" unless $FLAG_NOSIGNAL ;
473
478
local $SIG {' ALRM' } = sub { _dead_sock($sock ); die " alarm" ; };
474
479
alarm($SOCK_TIMEOUT );
475
480
eval {
476
- if (send ($sock , $cmd , MSG_NOSIGNAL )) {
481
+ if (send ($sock , $cmd , $FLAG_NOSIGNAL )) {
477
482
while (my $res = readline($sock )) {
478
483
push @ret , $res ;
479
484
last if $res eq " END\r\n " ;
0 commit comments