diff options
| author | 2021-03-09 16:20:41 +0000 | |
|---|---|---|
| committer | 2021-03-09 16:20:41 +0000 | |
| commit | e1453c1656c65ab2deb30aac13164534e41f4020 (patch) | |
| tree | f57919d1c83edce17e3401afa3f460a05ac35003 /libs | |
| parent | 62c950a8afc4e4d048e6bb612cd0056ff7948557 (diff) | |
| parent | 241b62b26d76ceab5c3e731ce926f9688178b8d7 (diff) | |
Merge "Mark Status as Sync and Send." am: c9c0dfbfc5 am: 241b62b26d
Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1620972
MUST ONLY BE SUBMITTED BY AUTOMERGER
Change-Id: Ib6281a203849d431eb70b8f052b4e9933dc67f71
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/binder/rust/src/error.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/libs/binder/rust/src/error.rs b/libs/binder/rust/src/error.rs index 4492cf72f4..2598ebc804 100644 --- a/libs/binder/rust/src/error.rs +++ b/libs/binder/rust/src/error.rs @@ -77,9 +77,7 @@ fn parse_exception_code(code: i32) -> ExceptionCode { e if e == ExceptionCode::ILLEGAL_ARGUMENT as i32 => ExceptionCode::ILLEGAL_ARGUMENT, e if e == ExceptionCode::NULL_POINTER as i32 => ExceptionCode::NULL_POINTER, e if e == ExceptionCode::ILLEGAL_STATE as i32 => ExceptionCode::ILLEGAL_STATE, - e if e == ExceptionCode::NETWORK_MAIN_THREAD as i32 => { - ExceptionCode::NETWORK_MAIN_THREAD - } + e if e == ExceptionCode::NETWORK_MAIN_THREAD as i32 => ExceptionCode::NETWORK_MAIN_THREAD, e if e == ExceptionCode::UNSUPPORTED_OPERATION as i32 => { ExceptionCode::UNSUPPORTED_OPERATION } @@ -96,6 +94,16 @@ fn parse_exception_code(code: i32) -> ExceptionCode { /// Used in AIDL transactions to represent failed transactions. pub struct Status(*mut sys::AStatus); +// Safety: The `AStatus` that the `Status` points to must have an entirely thread-safe API for the +// duration of the `Status` object's lifetime. We ensure this by not allowing mutation of a `Status` +// in Rust, and the NDK API says we're the owner of our `AStatus` objects so outside code should not +// be mutating them underneath us. +unsafe impl Sync for Status {} + +// Safety: `Status` always contains an owning pointer to a global, immutable, interned `AStatus`. +// A thread-local `AStatus` would not be valid. +unsafe impl Send for Status {} + impl Status { /// Create a status object representing a successful transaction. pub fn ok() -> Self { |