blob: 5ead796d806fa1a6dfe783fbb05b297319be83a6 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
use ipc_channel::ipc::IpcSharedMemory;
use once_cell::sync::Lazy;
use std::{
mem::{size_of, transmute},
sync::atomic::AtomicUsize,
};
#[derive(Default)]
pub struct Global {
pub channel_size: AtomicUsize,
// pub worker_pid: AtomicU32,
}
/// Global shared memory.
pub static GLOBAL: Lazy<&Global> = Lazy::new(|| {
static SHARE: Lazy<IpcSharedMemory> = Lazy::new(|| {
let buf: [u8; size_of::<Global>()] = unsafe { transmute(Global::default()) };
IpcSharedMemory::from_bytes(&buf)
});
let share: &[u8] = &SHARE;
unsafe { (share.as_ptr() as *const Global).as_ref().unwrap() }
});