diff options
| author | Jorge Aparicio <japaricious@gmail.com> | 2017-04-07 18:14:48 -0500 |
|---|---|---|
| committer | Jorge Aparicio <japaricious@gmail.com> | 2017-04-07 18:14:48 -0500 |
| commit | f2bab47aa4bdd04f79e608debe64e3ddcea07702 (patch) | |
| tree | 5626aba835b65a100fbefdb6f1f33a27bcfe81ce /src/lib.rs | |
| parent | 8e1c72057c6fdd09ad14e9b69596e17fcfd9335f (diff) | |
allow returns from checked::Resource.lock{,mut}
also add compiler barriers
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -105,7 +105,9 @@ where lock_check(ceiling); let old_basepri = basepri::read(); basepri_max::write(ceiling); + compiler_barrier(); let ret = f(&*res, ptr::read(0 as *const _)); + compiler_barrier(); basepri::write(old_basepri); ret } @@ -121,11 +123,23 @@ where lock_check(ceiling); let old_basepri = basepri::read(); basepri_max::write(ceiling); + compiler_barrier(); let ret = f(&mut *res, ptr::read(0 as *const _)); + compiler_barrier(); basepri::write(old_basepri); ret } +fn compiler_barrier() { + unsafe { + asm!("" + : + : + : "memory" + : "volatile"); + } +} + /// A peripheral as a resource pub struct ResourceP<P, Ceiling> where |
