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