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 95
95
96
96
read_task = Async do
97
97
r . read ( 5 )
98
+ nil
99
+ rescue IOError => e
100
+ e . to_s
98
101
end
99
-
102
+
100
103
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'
103
214
end
104
215
end
105
216
end
You can’t perform that action at this time.
0 commit comments