diff options
| author | 2021-03-09 15:03:52 +0000 | |
|---|---|---|
| committer | 2021-03-09 15:03:52 +0000 | |
| commit | c9c0dfbfc574a746c5dad93fe51c95ca10a26aaa (patch) | |
| tree | f57919d1c83edce17e3401afa3f460a05ac35003 /libs | |
| parent | 5dc18f28e3630fd66253b17c167b115f052f752f (diff) | |
| parent | e25ed4b95710a9028c1f4a7bdcb6698a59825789 (diff) | |
Merge "Mark Status as Sync and Send."
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 { |