Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(749)

Unified Diff: mojo/public/rust/src/system/handle.rs

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/rust/src/system/ffi.rs ('k') | mojo/public/rust/src/system/message_pipe.rs » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/rust/src/system/handle.rs
diff --git a/mojo/public/rust/src/system/handle.rs b/mojo/public/rust/src/system/handle.rs
deleted file mode 100644
index 241343e1b137d9a0def140b183945010fad4ef63..0000000000000000000000000000000000000000
--- a/mojo/public/rust/src/system/handle.rs
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-//! The way Mojo handles are handled in Rust is very similar
-//! to Go, though more type-safe. Here we define an "untyped"
-//! handle which means that what the handle actually represents
-//! is unknown. This is the basic handle wrapper, and it handles
-//! closing the handle once the wrapper goes out of scope, therefore
-//! preventing any resources from being leaked. "Typed" handles
-//! are MessageEndpoints or Consumers/Producers in this library
-//! and they represent handles which represent parts of message pipes,
-//! data pipes, and shared buffers. Typed handles wrap untyped handles
-//! but act much the same as untyped handles.
-
-use system::ffi;
-// This full import is intentional; nearly every type in mojo_types needs to be used.
-use system::mojo_types::*;
-
-/// The CastHandle trait defines an interface to convert between
-/// typed and untyped handles. These are only used internally for
-/// typed handles.
-pub trait CastHandle {
- /// Passes an ownership of an untyped handle and produces a
- /// typed handle which owns that untyped handle
- ///
- /// Casting to a typed handle is unsafe because the handle may
- /// not necessarily be a handle to the typed primitive being
- /// casted to internally in Mojo
- unsafe fn from_untyped(handle: UntypedHandle) -> Self;
-
- /// Consumes a typed handle and releases ownership of the
- /// untyped handle it owned
- fn as_untyped(self) -> UntypedHandle;
-}
-
-/// The Handle trait simply means that we can extract
-/// the native integer-based Mojo handle from the typed handle.
-pub trait Handle {
- /// Returns the native handle wrapped by whatever structure
- /// implements this trait.
- fn get_native_handle(&self) -> MojoHandle;
-
- /// Waits on the handle wrapped in the current struct until the signals
- /// declared in 'signals' are triggered, waiting for a maximum time of
- /// 'deadline'. This method blocks.
- ///
- /// Returns the satisfied and satisfiable signals respectively for this
- /// handle when waiting is done.
- fn wait(&self, signals: HandleSignals, deadline: MojoDeadline) -> (SignalsState, MojoResult) {
- let mut state: SignalsState = Default::default();
- let r = unsafe {
- ffi::MojoWait(self.get_native_handle(),
- signals,
- deadline,
- &mut state as *mut SignalsState)
- };
- (state, MojoResult::from_code(r))
- }
-}
-
-/// The basic untyped handle that wraps a MojoHandle (a u32)
-pub struct UntypedHandle {
- /// The native Mojo handle
- value: MojoHandle,
-}
-
-impl UntypedHandle {
- /// Invalidates the Handle by setting its native handle to
- /// zero, the canonical invalid handle in Mojo.
- ///
- /// This function is unsafe because clearing a native handle
- /// without closing it is a resource leak.
- pub unsafe fn invalidate(&mut self) {
- self.value = 0
- }
-
- /// Checks if the native handle is valid (0 = canonical invalid handle).
- pub fn is_valid(&self) -> bool {
- self.value != 0
- }
-}
-
-impl Handle for UntypedHandle {
- /// Pulls out a copy of the native handle wrapped by this structure.
- fn get_native_handle(&self) -> MojoHandle {
- self.value
- }
-}
-
-impl CastHandle for UntypedHandle {
- /// Casting an untyped handle is a no-op, but we include
- /// this to eliminate code duplication.
- unsafe fn from_untyped(handle: UntypedHandle) -> Self {
- handle
- }
-
- /// Casting to an untyped handle is a no-op, but we include
- /// this to eliminate code duplication.
- fn as_untyped(self) -> UntypedHandle {
- self
- }
-}
-
-impl Drop for UntypedHandle {
- /// The destructor for an untyped handle which closes the native handle
- /// it wraps.
- fn drop(&mut self) {
- if self.is_valid() {
- let result = MojoResult::from_code(unsafe { ffi::MojoClose(self.get_native_handle()) });
- if result != MojoResult::Okay {
- panic!("Failed to close handle! Reason: {}", result);
- }
- }
- }
-}
-
-/// Acquires a native handle by wrapping it in an untyped handle, allowing
-/// us to track the resource and free it appropriately
-pub unsafe fn acquire(handle: MojoHandle) -> UntypedHandle {
- UntypedHandle { value: handle }
-}
« no previous file with comments | « mojo/public/rust/src/system/ffi.rs ('k') | mojo/public/rust/src/system/message_pipe.rs » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698