Skip to content

Commit 57e8281

Browse files
author
wanglei13866
committed
robustness: remove unwrap to prevent potential panics
1 parent 3f4274e commit 57e8281

File tree

3 files changed

+740
-203
lines changed

3 files changed

+740
-203
lines changed

src/dispatcher.rs

Lines changed: 85 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::hostcalls;
1616
use crate::traits::*;
1717
use crate::types::*;
1818
use hashbrown::HashMap;
19-
use log::trace;
19+
use log::{error, trace};
2020
use std::cell::{Cell, RefCell};
2121

2222
thread_local! {
@@ -414,15 +414,24 @@ impl Dispatcher {
414414

415415
if let Some(http_stream) = self.http_streams.borrow_mut().get_mut(&context_id) {
416416
self.active_id.set(context_id);
417-
hostcalls::set_effective_context(context_id).unwrap();
417+
if let Err(e) = hostcalls::set_effective_context(context_id){
418+
error!("set_effective_context failed: {:?}", e);
419+
return;
420+
}
418421
http_stream.on_http_call_response(token_id, num_headers, body_size, num_trailers)
419422
} else if let Some(stream) = self.streams.borrow_mut().get_mut(&context_id) {
420423
self.active_id.set(context_id);
421-
hostcalls::set_effective_context(context_id).unwrap();
424+
if let Err(e) = hostcalls::set_effective_context(context_id) {
425+
error!("set_effective_context failed: {:?}", e);
426+
return;
427+
}
422428
stream.on_http_call_response(token_id, num_headers, body_size, num_trailers)
423429
} else if let Some(root) = self.roots.borrow_mut().get_mut(&context_id) {
424430
self.active_id.set(context_id);
425-
hostcalls::set_effective_context(context_id).unwrap();
431+
if let Err(e) = hostcalls::set_effective_context(context_id) {
432+
error!("set_effective_context failed: {:?}", e);
433+
return;
434+
}
426435
root.on_http_call_response(token_id, num_headers, body_size, num_trailers)
427436
}
428437
}
@@ -439,15 +448,24 @@ impl Dispatcher {
439448

440449
if let Some(http_stream) = self.http_streams.borrow_mut().get_mut(&context_id) {
441450
self.active_id.set(context_id);
442-
hostcalls::set_effective_context(context_id).unwrap();
451+
if let Err(e) = hostcalls::set_effective_context(context_id){
452+
error!("set_effective_context failed: {:?}", e);
453+
return;
454+
}
443455
http_stream.on_grpc_stream_initial_metadata(token_id, headers);
444456
} else if let Some(stream) = self.streams.borrow_mut().get_mut(&context_id) {
445457
self.active_id.set(context_id);
446-
hostcalls::set_effective_context(context_id).unwrap();
458+
if let Err(e) = hostcalls::set_effective_context(context_id){
459+
error!("set_effective_context failed: {:?}", e);
460+
return;
461+
}
447462
stream.on_grpc_stream_initial_metadata(token_id, headers);
448463
} else if let Some(root) = self.roots.borrow_mut().get_mut(&context_id) {
449464
self.active_id.set(context_id);
450-
hostcalls::set_effective_context(context_id).unwrap();
465+
if let Err(e) = hostcalls::set_effective_context(context_id){
466+
error!("set_effective_context failed: {:?}", e);
467+
return;
468+
}
451469
root.on_grpc_stream_initial_metadata(token_id, headers);
452470
}
453471
}
@@ -457,31 +475,49 @@ impl Dispatcher {
457475
if let Some(context_id) = context_id {
458476
if let Some(http_stream) = self.http_streams.borrow_mut().get_mut(&context_id) {
459477
self.active_id.set(context_id);
460-
hostcalls::set_effective_context(context_id).unwrap();
478+
if let Err(e) = hostcalls::set_effective_context(context_id){
479+
error!("set_effective_context failed: {:?}", e);
480+
return;
481+
}
461482
http_stream.on_grpc_call_response(token_id, 0, response_size);
462483
} else if let Some(stream) = self.streams.borrow_mut().get_mut(&context_id) {
463484
self.active_id.set(context_id);
464-
hostcalls::set_effective_context(context_id).unwrap();
485+
if let Err(e) = hostcalls::set_effective_context(context_id){
486+
error!("set_effective_context failed: {:?}", e);
487+
return;
488+
}
465489
stream.on_grpc_call_response(token_id, 0, response_size);
466490
} else if let Some(root) = self.roots.borrow_mut().get_mut(&context_id) {
467491
self.active_id.set(context_id);
468-
hostcalls::set_effective_context(context_id).unwrap();
492+
if let Err(e) = hostcalls::set_effective_context(context_id) {
493+
error!("set_effective_context failed: {:?}", e);
494+
return;
495+
}
469496
root.on_grpc_call_response(token_id, 0, response_size);
470497
}
471498
} else {
472499
let context_id = self.grpc_streams.borrow().get(&token_id).cloned();
473500
if let Some(context_id) = context_id {
474501
if let Some(http_stream) = self.http_streams.borrow_mut().get_mut(&context_id) {
475502
self.active_id.set(context_id);
476-
hostcalls::set_effective_context(context_id).unwrap();
503+
if let Err(e) = hostcalls::set_effective_context(context_id){
504+
error!("set_effective_context failed: {:?}", e);
505+
return;
506+
}
477507
http_stream.on_grpc_stream_message(token_id, response_size);
478508
} else if let Some(stream) = self.streams.borrow_mut().get_mut(&context_id) {
479509
self.active_id.set(context_id);
480-
hostcalls::set_effective_context(context_id).unwrap();
510+
if let Err(e) = hostcalls::set_effective_context(context_id){
511+
error!("set_effective_context failed: {:?}", e);
512+
return;
513+
}
481514
stream.on_grpc_stream_message(token_id, response_size);
482515
} else if let Some(root) = self.roots.borrow_mut().get_mut(&context_id) {
483516
self.active_id.set(context_id);
484-
hostcalls::set_effective_context(context_id).unwrap();
517+
if let Err(e) = hostcalls::set_effective_context(context_id){
518+
error!("set_effective_context failed: {:?}", e);
519+
return;
520+
}
485521
root.on_grpc_stream_message(token_id, response_size);
486522
}
487523
} else {
@@ -503,15 +539,24 @@ impl Dispatcher {
503539

504540
if let Some(http_stream) = self.http_streams.borrow_mut().get_mut(&context_id) {
505541
self.active_id.set(context_id);
506-
hostcalls::set_effective_context(context_id).unwrap();
542+
if let Err(e) = hostcalls::set_effective_context(context_id){
543+
error!("set_effective_context failed: {:?}", e);
544+
return;
545+
}
507546
http_stream.on_grpc_stream_trailing_metadata(token_id, trailers);
508547
} else if let Some(stream) = self.streams.borrow_mut().get_mut(&context_id) {
509548
self.active_id.set(context_id);
510-
hostcalls::set_effective_context(context_id).unwrap();
549+
if let Err(e) = hostcalls::set_effective_context(context_id){
550+
error!("set_effective_context failed: {:?}", e);
551+
return;
552+
}
511553
stream.on_grpc_stream_trailing_metadata(token_id, trailers);
512554
} else if let Some(root) = self.roots.borrow_mut().get_mut(&context_id) {
513555
self.active_id.set(context_id);
514-
hostcalls::set_effective_context(context_id).unwrap();
556+
if let Err(e) = hostcalls::set_effective_context(context_id){
557+
error!("set_effective_context failed: {:?}", e);
558+
return;
559+
}
515560
root.on_grpc_stream_trailing_metadata(token_id, trailers);
516561
}
517562
}
@@ -521,31 +566,49 @@ impl Dispatcher {
521566
if let Some(context_id) = context_id {
522567
if let Some(http_stream) = self.http_streams.borrow_mut().get_mut(&context_id) {
523568
self.active_id.set(context_id);
524-
hostcalls::set_effective_context(context_id).unwrap();
569+
if let Err(e) = hostcalls::set_effective_context(context_id){
570+
error!("set_effective_context failed: {:?}", e);
571+
return;
572+
}
525573
http_stream.on_grpc_call_response(token_id, status_code, 0);
526574
} else if let Some(stream) = self.streams.borrow_mut().get_mut(&context_id) {
527575
self.active_id.set(context_id);
528-
hostcalls::set_effective_context(context_id).unwrap();
576+
if let Err(e) = hostcalls::set_effective_context(context_id){
577+
error!("set_effective_context failed: {:?}", e);
578+
return;
579+
}
529580
stream.on_grpc_call_response(token_id, status_code, 0);
530581
} else if let Some(root) = self.roots.borrow_mut().get_mut(&context_id) {
531582
self.active_id.set(context_id);
532-
hostcalls::set_effective_context(context_id).unwrap();
583+
if let Err(e) = hostcalls::set_effective_context(context_id){
584+
error!("set_effective_context failed: {:?}", e);
585+
return;
586+
}
533587
root.on_grpc_call_response(token_id, status_code, 0);
534588
}
535589
} else {
536590
let context_id = self.grpc_streams.borrow_mut().remove(&token_id);
537591
if let Some(context_id) = context_id {
538592
if let Some(http_stream) = self.http_streams.borrow_mut().get_mut(&context_id) {
539593
self.active_id.set(context_id);
540-
hostcalls::set_effective_context(context_id).unwrap();
594+
if let Err(e) = hostcalls::set_effective_context(context_id){
595+
error!("set_effective_context failed: {:?}", e);
596+
return;
597+
}
541598
http_stream.on_grpc_stream_close(token_id, status_code)
542599
} else if let Some(stream) = self.streams.borrow_mut().get_mut(&context_id) {
543600
self.active_id.set(context_id);
544-
hostcalls::set_effective_context(context_id).unwrap();
601+
if let Err(e) = hostcalls::set_effective_context(context_id){
602+
error!("set_effective_context failed: {:?}", e);
603+
return;
604+
}
545605
stream.on_grpc_stream_close(token_id, status_code)
546606
} else if let Some(root) = self.roots.borrow_mut().get_mut(&context_id) {
547607
self.active_id.set(context_id);
548-
hostcalls::set_effective_context(context_id).unwrap();
608+
if let Err(e) = hostcalls::set_effective_context(context_id){
609+
error!("set_effective_context failed: {:?}", e);
610+
return;
611+
}
549612
root.on_grpc_stream_close(token_id, status_code)
550613
}
551614
} else {

0 commit comments

Comments
 (0)