summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2022-04-13 10:48:13 -0700
committerJeremy Evans <code@jeremyevans.net>2022-04-20 09:25:59 -0700
commitc3a0a52c29f5ca39f3c8d1c8968e8ffe61e06f08 (patch)
tree874d528ed1093ce90ea13c72ae43ad1f69b51934
parentcd4b3c934a8681f5d15053295b7dc34d56b2ccad (diff)
downloadrack-c3a0a52c29f5ca39f3c8d1c8968e8ffe61e06f08.tar.gz
Fix "reject insanely long boundaries" test hang
At least on OpenBSD, this test occasionally hangs, because the `wr.write` does not return/raise after the `rd.close` in the other thread. Switch to `write_nonblock` with `exception: false`, using Thread.pass if the write would block. With this change, the test takes less than two seconds and does not hang.
-rw-r--r--test/spec_multipart.rb6
1 files changed, 5 insertions, 1 deletions
diff --git a/test/spec_multipart.rb b/test/spec_multipart.rb
index 1fea0808..8683cbc2 100644
--- a/test/spec_multipart.rb
+++ b/test/spec_multipart.rb
@@ -131,7 +131,11 @@ describe Rack::Multipart do
# make the initial boundary a few gigs long
longer = "0123456789" * 1024 * 1024
- (1024 * 1024).times { wr.write(longer) }
+ (1024 * 1024).times do
+ while wr.write_nonblock(longer, exception: false) == :wait_writable
+ Thread.pass
+ end
+ end
wr.write("\r\n")
wr.write('content-disposition: form-data; name="a"; filename="a.txt"')