From: Michael Stapelberg Date: Sun, 20 Nov 2011 10:51:21 +0000 (+0000) Subject: complete-run: close all fds except for 0, 1, 2 X-Git-Tag: 4.2~238 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=3abd7ab073d999ee822a1b9c51a1ed1cc5067c77;p=i3%2Fi3 complete-run: close all fds except for 0, 1, 2 running in a VIM subshell leads to one more fd, for example --- diff --git a/testcases/complete-run.pl b/testcases/complete-run.pl index e85f5bbb..56ed01a5 100755 --- a/testcases/complete-run.pl +++ b/testcases/complete-run.pl @@ -24,10 +24,15 @@ use StartXDummy; use StatusLine; # the following modules are not shipped with Perl use AnyEvent; +use AnyEvent::Util; use AnyEvent::Handle; use AnyEvent::I3 qw(:all); use X11::XCB; +# Close superfluous file descriptors which were passed by running in a VIM +# subshell or situations like that. +AnyEvent::Util::close_all_fds_except(0, 1, 2); + # We actually use AnyEvent to make sure it loads an event loop implementation. # Afterwards, we overwrite SIGCHLD: my $cv = AnyEvent->condvar; diff --git a/testcases/lib/SocketActivation.pm b/testcases/lib/SocketActivation.pm index 01b1eb3d..da1dda33 100644 --- a/testcases/lib/SocketActivation.pm +++ b/testcases/lib/SocketActivation.pm @@ -7,6 +7,7 @@ use IO::Socket::UNIX; # core use Cwd qw(abs_path); # core use POSIX qw(:fcntl_h); # core use AnyEvent::Handle; # not core +use AnyEvent::Util; # not core use Exporter 'import'; use v5.10; @@ -78,6 +79,10 @@ sub activate_i3 { POSIX::close(fileno($socket)); } + # Make sure no file descriptors are open. Strangely, I got an open file + # descriptor pointing to AnyEvent/Impl/EV.pm when testing. + AnyEvent::Util::close_all_fds_except(0, 1, 2, 3); + # Construct the command to launch i3. Use maximum debug level, disable # the interactive signalhandler to make it crash immediately instead. my $i3cmd = abs_path("../i3") . " -V -d all --disable-signalhandler";