File tree Expand file tree Collapse file tree 1 file changed +114
-3
lines changed
Expand file tree Collapse file tree 1 file changed +114
-3
lines changed Original file line number Diff line number Diff line change 9595
9696 read_task = Async do
9797 r . read ( 5 )
98+ nil
99+ rescue IOError => e
100+ e . to_s
98101 end
99-
102+
100103 r . close
101-
102- expect { read_task . wait } . to raise_exception ( IOError )
104+
105+ expect ( read_task . wait ) . to be == 'closed stream'
106+ end
107+
108+ it "can interrupt reading fiber when closing from another fiber" do
109+ r , w = IO . pipe
110+
111+ read_task = Async do
112+ r . read ( 5 )
113+ nil
114+ rescue IOError => e
115+ e . to_s
116+ end
117+
118+ close_task = Async do
119+ r . close
120+ end
121+
122+ close_task . wait
123+ expect ( read_task . wait ) . to be == 'closed stream'
124+ end
125+
126+ it "can interrupt reading fiber when closing from a new thread" do
127+ r , w = IO . pipe
128+
129+ read_task = Async do
130+ r . read ( 5 )
131+ nil
132+ rescue IOError => e
133+ e . to_s
134+ end
135+
136+ close_thread = Thread . new do
137+ r . close
138+ end
139+
140+ close_thread . value
141+ expect ( read_task . wait ) . to be == 'closed stream'
142+ end
143+
144+ it "can interrupt reading fiber when closing from a fiber in a new thread" do
145+ r , w = IO . pipe
146+
147+ read_task = Async do
148+ r . read ( 5 )
149+ nil
150+ rescue IOError => e
151+ e . to_s
152+ end
153+
154+ close_thread = Thread . new do
155+ close_task = Async do
156+ r . close
157+ end
158+ close_task . wait
159+ end
160+
161+ close_thread . value
162+ expect ( read_task . wait ) . to be == 'closed stream'
163+ end
164+
165+ it "can interrupt reading thread when closing from a fiber" do
166+ r , w = IO . pipe
167+
168+ read_thread = Thread . new do
169+ Thread . current . report_on_exception = false
170+ r . read ( 5 )
171+ nil
172+ rescue IOError => e
173+ e . to_s
174+ end
175+
176+ # Wait until read_thread blocks on I/O
177+ while read_thread . status != 'sleep'
178+ sleep ( 0.001 )
179+ end
180+
181+ close_task = Async do
182+ r . close
183+ end
184+
185+ close_task . wait
186+ expect ( read_thread . value ) . to be == 'closed stream'
187+ end
188+
189+ it "can interrupt reading fiber in a new thread when closing from a fiber" do
190+ r , w = IO . pipe
191+
192+ read_thread = Thread . new do
193+ Thread . current . report_on_exception = false
194+ read_task = Async do
195+ r . read ( 5 )
196+ nil
197+ rescue IOError => e
198+ e . to_s
199+ end
200+ read_task . wait
201+ end
202+
203+ # Wait until read_thread blocks on I/O
204+ while read_thread . status != 'sleep'
205+ sleep ( 0.001 )
206+ end
207+
208+ close_task = Async do
209+ r . close
210+ end
211+ close_task . wait
212+
213+ expect ( read_thread . value ) . to be == 'closed stream'
103214 end
104215 end
105216end
You can’t perform that action at this time.
0 commit comments