@@ -129,7 +129,12 @@ impl Call {
129
129
tag,
130
130
)
131
131
} ) ;
132
- Ok ( ClientUnaryReceiver :: new ( call, cq_f, method. resp_de ( ) ) )
132
+ Ok ( ClientUnaryReceiver :: new (
133
+ call,
134
+ cq_f,
135
+ method. resp_de ( ) ,
136
+ channel,
137
+ ) )
133
138
}
134
139
135
140
pub fn client_streaming < Req , Resp > (
@@ -151,11 +156,12 @@ impl Call {
151
156
} ) ;
152
157
153
158
let share_call = Arc :: new ( SpinLock :: new ( ShareCall :: new ( call, cq_f) ) ) ;
154
- let sink = ClientCStreamSender :: new ( share_call. clone ( ) , method. req_ser ( ) ) ;
159
+ let sink = ClientCStreamSender :: new ( share_call. clone ( ) , method. req_ser ( ) , channel ) ;
155
160
let recv = ClientCStreamReceiver {
156
161
call : share_call,
157
162
resp_de : method. resp_de ( ) ,
158
163
finished : false ,
164
+ _channel_keepalive : channel. clone ( ) ,
159
165
} ;
160
166
Ok ( ( sink, recv) )
161
167
}
@@ -189,7 +195,12 @@ impl Call {
189
195
grpc_sys:: grpcwrap_call_recv_initial_metadata ( call. call , ctx, tag)
190
196
} ) ;
191
197
192
- Ok ( ClientSStreamReceiver :: new ( call, cq_f, method. resp_de ( ) ) )
198
+ Ok ( ClientSStreamReceiver :: new (
199
+ call,
200
+ cq_f,
201
+ method. resp_de ( ) ,
202
+ channel,
203
+ ) )
193
204
}
194
205
195
206
pub fn duplex_streaming < Req , Resp > (
@@ -216,8 +227,8 @@ impl Call {
216
227
} ) ;
217
228
218
229
let share_call = Arc :: new ( SpinLock :: new ( ShareCall :: new ( call, cq_f) ) ) ;
219
- let sink = ClientDuplexSender :: new ( share_call. clone ( ) , method. req_ser ( ) ) ;
220
- let recv = ClientDuplexReceiver :: new ( share_call, method. resp_de ( ) ) ;
230
+ let sink = ClientDuplexSender :: new ( share_call. clone ( ) , method. req_ser ( ) , channel ) ;
231
+ let recv = ClientDuplexReceiver :: new ( share_call, method. resp_de ( ) , channel ) ;
221
232
Ok ( ( sink, recv) )
222
233
}
223
234
}
@@ -230,14 +241,21 @@ pub struct ClientUnaryReceiver<T> {
230
241
call : Call ,
231
242
resp_f : BatchFuture ,
232
243
resp_de : DeserializeFn < T > ,
244
+ _channel_keepalive : Channel ,
233
245
}
234
246
235
247
impl < T > ClientUnaryReceiver < T > {
236
- fn new ( call : Call , resp_f : BatchFuture , resp_de : DeserializeFn < T > ) -> ClientUnaryReceiver < T > {
248
+ fn new (
249
+ call : Call ,
250
+ resp_f : BatchFuture ,
251
+ resp_de : DeserializeFn < T > ,
252
+ _channel_keepalive : & Channel ,
253
+ ) -> ClientUnaryReceiver < T > {
237
254
ClientUnaryReceiver {
238
255
call,
239
256
resp_f,
240
257
resp_de,
258
+ _channel_keepalive : _channel_keepalive. clone ( ) ,
241
259
}
242
260
}
243
261
@@ -276,6 +294,7 @@ pub struct ClientCStreamReceiver<T> {
276
294
call : Arc < SpinLock < ShareCall > > ,
277
295
resp_de : DeserializeFn < T > ,
278
296
finished : bool ,
297
+ _channel_keepalive : Channel ,
279
298
}
280
299
281
300
impl < T > ClientCStreamReceiver < T > {
@@ -326,15 +345,21 @@ pub struct StreamingCallSink<Req> {
326
345
sink_base : SinkBase ,
327
346
close_f : Option < BatchFuture > ,
328
347
req_ser : SerializeFn < Req > ,
348
+ _channel_keepalive : Channel ,
329
349
}
330
350
331
351
impl < Req > StreamingCallSink < Req > {
332
- fn new ( call : Arc < SpinLock < ShareCall > > , req_ser : SerializeFn < Req > ) -> StreamingCallSink < Req > {
352
+ fn new (
353
+ call : Arc < SpinLock < ShareCall > > ,
354
+ req_ser : SerializeFn < Req > ,
355
+ _channel_keepalive : & Channel ,
356
+ ) -> StreamingCallSink < Req > {
333
357
StreamingCallSink {
334
358
call,
335
359
sink_base : SinkBase :: new ( false ) ,
336
360
close_f : None ,
337
361
req_ser,
362
+ _channel_keepalive : _channel_keepalive. clone ( ) ,
338
363
}
339
364
}
340
365
@@ -490,17 +515,20 @@ impl<H: ShareCallHolder, T> ResponseStreamImpl<H, T> {
490
515
#[ must_use = "if unused the ClientSStreamReceiver may immediately cancel the RPC" ]
491
516
pub struct ClientSStreamReceiver < Resp > {
492
517
imp : ResponseStreamImpl < ShareCall , Resp > ,
518
+ _channel_keepalive : Channel ,
493
519
}
494
520
495
521
impl < Resp > ClientSStreamReceiver < Resp > {
496
522
fn new (
497
523
call : Call ,
498
524
finish_f : BatchFuture ,
499
525
de : DeserializeFn < Resp > ,
526
+ _channel_keepalive : & Channel ,
500
527
) -> ClientSStreamReceiver < Resp > {
501
528
let share_call = ShareCall :: new ( call, finish_f) ;
502
529
ClientSStreamReceiver {
503
530
imp : ResponseStreamImpl :: new ( share_call, de) ,
531
+ _channel_keepalive : _channel_keepalive. clone ( ) ,
504
532
}
505
533
}
506
534
@@ -528,12 +556,18 @@ impl<Resp> Stream for ClientSStreamReceiver<Resp> {
528
556
#[ must_use = "if unused the ClientDuplexReceiver may immediately cancel the RPC" ]
529
557
pub struct ClientDuplexReceiver < Resp > {
530
558
imp : ResponseStreamImpl < Arc < SpinLock < ShareCall > > , Resp > ,
559
+ _channel_keepalive : Channel ,
531
560
}
532
561
533
562
impl < Resp > ClientDuplexReceiver < Resp > {
534
- fn new ( call : Arc < SpinLock < ShareCall > > , de : DeserializeFn < Resp > ) -> ClientDuplexReceiver < Resp > {
563
+ fn new (
564
+ call : Arc < SpinLock < ShareCall > > ,
565
+ de : DeserializeFn < Resp > ,
566
+ _channel_keepalive : & Channel ,
567
+ ) -> ClientDuplexReceiver < Resp > {
535
568
ClientDuplexReceiver {
536
569
imp : ResponseStreamImpl :: new ( call, de) ,
570
+ _channel_keepalive : _channel_keepalive. clone ( ) ,
537
571
}
538
572
}
539
573
0 commit comments