@@ -1067,26 +1067,41 @@ impl Rng for EntropyRng {
1067
1067
switch_rng = Some ( EntropySource :: Os ( os_rng) ) ;
1068
1068
}
1069
1069
Err ( os_rng_error) => {
1070
- if let Ok ( jitter_rng) = try_jitter_new ( dest) {
1071
- switch_rng = Some ( EntropySource :: Jitter ( jitter_rng) ) ;
1072
- } else {
1073
- return Err ( os_rng_error) ;
1070
+ warn ! ( "EntropyRng: OsRng failed [falling back to JitterRng]: {}" ,
1071
+ os_rng_error) ;
1072
+ match try_jitter_new ( dest) {
1073
+ Ok ( jitter_rng) => {
1074
+ switch_rng = Some ( EntropySource :: Jitter ( jitter_rng) ) ;
1075
+ }
1076
+ Err ( jitter_error) => {
1077
+ warn ! ( "EntropyRng: JitterRng failed: {}" ,
1078
+ jitter_error) ;
1079
+ return Err ( os_rng_error) ;
1080
+ }
1074
1081
}
1075
1082
}
1076
1083
}
1077
1084
}
1078
1085
EntropySource :: Os ( ref mut rng) => {
1079
1086
let os_rng_result = rng. try_fill_bytes ( dest) ;
1080
- if os_rng_result. is_err ( ) {
1081
- if let Ok ( jitter_rng) = try_jitter_new ( dest) {
1082
- switch_rng = Some ( EntropySource :: Jitter ( jitter_rng) ) ;
1083
- } else {
1084
- return os_rng_result;
1087
+ if let Err ( os_rng_error) = os_rng_result {
1088
+ warn ! ( "EntropyRng: OsRng failed [falling back to JitterRng]: {}" ,
1089
+ os_rng_error) ;
1090
+ match try_jitter_new ( dest) {
1091
+ Ok ( jitter_rng) => {
1092
+ switch_rng = Some ( EntropySource :: Jitter ( jitter_rng) ) ;
1093
+ }
1094
+ Err ( jitter_error) => {
1095
+ warn ! ( "EntropyRng: JitterRng failed: {}" ,
1096
+ jitter_error) ;
1097
+ return Err ( os_rng_error) ;
1098
+ }
1085
1099
}
1086
1100
}
1087
1101
}
1088
1102
EntropySource :: Jitter ( ref mut rng) => {
1089
1103
if let Ok ( os_rng) = try_os_new ( dest) {
1104
+ info ! ( "EntropyRng: OsRng available [switching back from JitterRng]" ) ;
1090
1105
switch_rng = Some ( EntropySource :: Os ( os_rng) ) ;
1091
1106
} else {
1092
1107
return rng. try_fill_bytes ( dest) ; // use JitterRng
0 commit comments