Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re^2: application crash during WINCH Signal

by hanspr (Sexton)
on Nov 28, 2019 at 15:15 UTC ( [id://11109367]=note: print w/replies, xml ) Need Help??


in reply to Re: application crash during WINCH Signal
in thread application crash during WINCH Signal

Hi Dave,

Thanks for your answer,the connection code is 4000+ lines long, the HUP handler signal is the there a few lines below.

Still haven't found any place where the same application could be sending itself the hup, signal, but will keep looking.

But what I do not get is, why would happen in one desktop environment and not others.

This is a larger section of the code, the HUP Signal it is handled, tell me if I should post all of it. Or this is the link to the complete code in that section pac_conn
The other pace that has interaction with pac_conn is PACTerminal.pm

There are some hup signals sent from PACTerminal.pm, I'll comment them to see if there is any change, but It doesn't seam to be related.

$SIG{'WINCH'} = sub { if (!$CONNECTED) { return 1; } while (! $EXP -> slave) { select(undef, undef, undef, 0.25); }; $EXP -> slave -> clone_winsize_from(\*STDIN); kill WINCH => $EXP -> pid if $EXP -> pid; }; $SIG{'INT'} = undef; $SIG{'HUP'} = sub { # Avoid more interruptions local $SIG{'WINCH'} = undef; my $chain_uuid = ''; my $CHAIN_CFG; if ($INT) { return 1; } $INT = 1; # First, read the file with the configuration to use my $rin = ''; vec($rin, fileno($SOCKET), 1) = 1; select($rin, undef, undef, 2) or return 1; sysread($SOCKET, $chain_uuid, 1024); $chain_uuid =~ s/^!!_PAC_CHAIN_\[(.+)\]!!$/$1/g; if (! $chain_uuid) { $INT = 0; return 1; } # Second, retrieve the 'serialized' configuration to be used $rin = ''; vec($rin, fileno($SOCKET), 1) = 1; select($rin, undef, undef, 2) or return 1; eval {$CHAIN_CFG = fd_retrieve($SOCKET);}; if ($@) { $INT = 0; return 1; } # Prepare some progressbar data my $chain_name = $$CHAIN_CFG{'environments'}{$chain_uuid}{'name'}; my $exp_partial = 0; my $exp_total = 0; foreach my $exp (@{$$CHAIN_CFG{'environments'}{$chain_uuid}{'expec +t'}}) { if ($$exp{'active'} // 0) { ++$exp_total; } } if (! $exp_total) { $INT = 0; return 1; } ctrl("CHAIN:$chain_name:$chain_uuid:$exp_partial:$exp_total"); my $TIMEOUT_CMD = $$CHAIN_CFG{'defaults'}{'timeout command'} || un +def; if ($$CHAIN_CFG{'environments'}{$chain_uuid}{'terminal options'}{' +use personal settings'}) { $TIMEOUT_CMD = $$CHAIN_CFG{'environments'}{$chain_uuid}{'termi +nal options'}{'timeout command'} || undef; } my $end = 0; my $avoid_first_expectation = 1; $EXP -> restart_timeout_upon_receive(1); for(my $i = 0; $i < scalar(@{$$CHAIN_CFG{'environments'}{$chain_uu +id}{'expect'}}); $i++) { my $hash = $$CHAIN_CFG{'environments'}{$chain_uuid}{'expect'}[ +$i]; my $pattern = $$hash{'expect'} // ''; my $command = $$hash{'send'} // ''; my $hide = $$hash{'hidden'} // 0; my $active = $$hash{'active'} // 0; my $return = $$hash{'return'} // 1; my $on_match = $$hash{'on_match'} // -1; my $on_fail = $$hash{'on_fail'} // -1; my $time_out = $$hash{'time_out'} // -1; if ($active) { next; } my $jump = 0; if ($time_out >= 0) { $TIMEOUT_CMD = $time_out; } $pattern = subst($pattern); ctrl("CHAIN:$chain_name:WAITING($pattern):" . ($exp_partial++) + . ":$exp_total"); # Wait for pattern prompt before continue... $EXP -> expect($TIMEOUT_CMD, [timeout => sub { if ($on_fail == -1) { ctrl("CLOSE:TIMEOUT:$TIMEOUT_CMD seconds expecting + pattern '$pattern'!!"); $CONNECTED = 0; $EXP -> hard_close; } elsif ($on_fail == -2) { ctrl("CHAIN:EXPECT:ON_FAIL:timeout expecting '$pat +tern'. Finishing Expect"); $CONNECTED = 1; $end = 1; } else { ctrl("CHAIN:EXPECT:ON_FAIL:timeout expecting '$pat +tern'. Jumping to '$on_fail'"); $i = --$on_fail; $jump = 1; } }], [eof => sub { $CONNECTED = 0; ctrl("CLOSE:Connection ended by remote peer!! " . $EXP + -> set_accum()); $EXP -> hard_close(); }], # Found Host-Key verification string [$HOSTCHANGE_PROMPT, sub { my $match = $EXP -> match; $match =~ /$HOSTCHANGE_PROMPT/go; my ($yes, $no) = ($1, $2); if ($ACCEPT_KEY) { send_slow($EXP, $yes . (($METHOD =~ /^.*3270.*$/) +|| ($METHOD eq 'IBM 3270/5250')) ? "\r\f" : "\n"); ctrl("EXPECT:HOSTKEY:accepted by configuration (se +nt '$yes')"); exp_continue; } else { send_slow($EXP, $no . (($METHOD =~ /^.*3270.*$/) | +| ($METHOD eq 'IBM 3270/5250')) ? "\r\f" : "\n"); $CONNECTED = 0; $EXP -> hard_close(); ctrl("CLOSE:EXPECT:HOSTKEY:rejected by configurati +on (sent '$no')"); } }], [($avoid_first_expectation) ? '' : $pattern, sub { if ($on_match == -1) { $jump = 0; } elsif ($on_match == -2) { $end = 1; $CONNECTED = 1; ctrl("CHAIN:EXPECT:ON_MATCH:found pattern '$patter +n'. Stopping by config"); } else { ctrl("CHAIN:EXPECT:ON_MATCH:found pattern '$patter +n'. Jumping to '$on_match'"); $avoid_first_expectation = 1; $i = --$on_match; } }] ); # EXPECT CLOSE if ($end) { last; } if ($jump) { next; } $avoid_first_expectation = 0; if (!$CONNECTED) { last; } $command = subst($command); # ... and launch command if ($hide) { ctrl("CHAIN:$chain_name:SENDING(<<HIDDEN STRING>>):$exp_pa +rtial:$exp_total"); $EXP -> log_stdout(0); } else { my $cmd_str = $command; $cmd_str =~ s/\n$//go; ctrl("CHAIN:$chain_name:SENDING:$cmd_str" . ($return ? '\n +' : '') . ":$exp_partial:$exp_total"); } send_slow($EXP, $command . ($return ? (($METHOD =~ /^.*3270.*$ +/) || ($METHOD eq 'IBM 3270/5250') ? "\r\f" : "\n") : '')); } $EXP -> log_stdout(0); $EXP -> restart_timeout_upon_receive(0); if ($$CHAIN_CFG{'tmp'}{'set title'}) { ctrl("TITLE:$$CHAIN_CFG{'tmp'}{'title'}"); } ctrl("CONNECTED"); $INT = 0; return 1; };

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11109367]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (2)
As of 2024-04-26 01:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found