1 // Copyright (c) 2023 Huawei Device Co., Ltd. 2 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // you may not use this file except in compliance with the License. 4 // You may obtain a copy of the License at 5 // 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 use std::io; 15 use std::sync::Arc; 16 17 use crate::sys::windows::iocp::CompletionPort; 18 use crate::{Selector, Token}; 19 20 #[derive(Debug)] 21 pub(crate) struct WakerInner { 22 token: Token, 23 completion_port: Arc<CompletionPort>, 24 } 25 26 impl WakerInner { 27 /// Creates a new WakerInner. new(selector: &Selector, token: Token) -> io::Result<WakerInner>28 pub(crate) fn new(selector: &Selector, token: Token) -> io::Result<WakerInner> { 29 Ok(WakerInner { 30 token, 31 completion_port: selector.clone_cp(), 32 }) 33 } 34 35 /// Waker allows cross-thread waking of Poll. wake(&self) -> io::Result<()>36 pub(crate) fn wake(&self) -> io::Result<()> { 37 self.completion_port.post(self.token) 38 } 39 } 40