blob: 34cf42c425a10a6a3b0e01624eafd7ef1c5d7d97 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
require_relative '../../spec_helper'
require_relative 'fixtures/classes'
describe "IO#flush" do
it "raises IOError on closed stream" do
-> { IOSpecs.closed_io.flush }.should raise_error(IOError)
end
describe "on a pipe" do
before :each do
@r, @w = IO.pipe
end
after :each do
@r.close
begin
@w.close
rescue Errno::EPIPE
end
end
# [ruby-core:90895] MJIT worker may leave fd open in a forked child.
# For instance, MJIT creates a worker before @r.close with fork(), @r.close happens,
# and the MJIT worker keeps the pipe open until the worker execve().
# TODO: consider acquiring GVL from MJIT worker.
guard_not -> { defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? } do
it "raises Errno::EPIPE if sync=false and the read end is closed" do
@w.sync = false
@w.write "foo"
@r.close
-> { @w.flush }.should raise_error(Errno::EPIPE, /Broken pipe/)
-> { @w.close }.should raise_error(Errno::EPIPE, /Broken pipe/)
end
end
end
end
|