Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change directory to $*TMPDIR #732

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion S32-io/IO-Socket-INET-UNIX.t
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@ plan 8;
if $*DISTRO.is-win {
skip-rest 'UNIX socket support on Windows NYI';
} else {
chdir $*TMPDIR;

my IO::Socket::INET:_ $server;
my IO::Socket::INET:_ $client;
my IO::Socket::INET:_ $accepted;
my Str:D $host = $*TMPDIR.add("test-$*PID.sock").Str;
my Str:D $host = "./test-$*PID.sock";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd suggest a bit less generic name here. However little the probability for an entry with the same name to exists in the temp dir, I'd rather make it even smaller. To my view, the 100% reliable solution (unless race condition is an option) is to add just one line:

$host = "./test-$*PID-" ~ ++$ ~ ".sock" while -e $host;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, there is a risk of race conditions when checking in that way, unfortunately.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's what I meant when added the "(unless ...)" part. But at least this problem is way less probable than with a static rather predictable name.

Copy link
Contributor Author

@Kaiepi Kaiepi Apr 10, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I figured existing I/O tests would already have dealt with this sort of problem. S16-filehandles/io.t opens files in the current directory and uses a less predictable filename:

sub nonce () { return ".{$*PID}." ~ (1..1000).pick() }
my $filename = 'tempfile_filehandles_io' ~ nonce();

But will silently continue with tests and remove the files if they already exist. I'm a bit wary of reusing this code. Do we always have permissions to write there?

my Str:D $sent = 'Hello, world!';
my Str:_ $received;
LEAVE $host.IO.unlink if $host.IO.e;
Expand Down