We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 6ca4943 commit d386b5dCopy full SHA for d386b5d
src/os.rs
@@ -436,13 +436,31 @@ mod imp {
436
impl Rng for OsRng {
437
fn next_u32(&mut self) -> u32 {
438
let ret;
439
- unsafe{asm!("rdrand $0":"=r"(ret):::"volatile")};
+ let mut retry=10;
440
+ unsafe{asm!("
441
+1:
442
+ rdrand $0
443
+ jc 2f
444
+ dec $1
445
+ jnz 1b
446
+2:
447
+ ":"=r"(ret),"=r"(retry):"1"(retry)::"volatile")};
448
+ if retry==0 { panic!("RDRAND failure") }
449
ret
450
}
451
#[cfg(target_arch="x86_64")]
452
fn next_u64(&mut self) -> u64 {
453
454
455
456
457
458
459
460
461
462
463
464
465
466
0 commit comments