From 3abd7ab073d999ee822a1b9c51a1ed1cc5067c77 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sun, 20 Nov 2011 10:51:21 +0000 Subject: [PATCH] complete-run: close all fds except for 0, 1, 2 running in a VIM subshell leads to one more fd, for example --- testcases/complete-run.pl | 5 +++++ testcases/lib/SocketActivation.pm | 5 +++++ 2 files changed, 10 insertions(+) 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";