get process_create working and add tests
This commit is contained in:
committed by
Bennet Bleßmann
parent
1120bcde29
commit
dc08a4ab11
20
src/arena.rs
20
src/arena.rs
@@ -20,6 +20,7 @@ use std::mem;
|
||||
use std::mem::ManuallyDrop;
|
||||
use std::net::TcpListener;
|
||||
use std::ops::{Deref, DerefMut};
|
||||
use std::process::Child;
|
||||
use std::ptr;
|
||||
use std::ptr::addr_of_mut;
|
||||
use std::ptr::NonNull;
|
||||
@@ -75,7 +76,8 @@ pub enum ArenaHeaderTag {
|
||||
HttpResponse = 0b1000010,
|
||||
PipeWriter = 0b1000011,
|
||||
Dropped = 0b1000100,
|
||||
PipeReader = 0b1000101,
|
||||
PipeReader = 0b1001001,
|
||||
ChildProcess = 0b1001010,
|
||||
}
|
||||
|
||||
#[bitfield]
|
||||
@@ -391,6 +393,19 @@ impl ArenaAllocated for HttpResponse {
|
||||
}
|
||||
}
|
||||
|
||||
impl ArenaAllocated for Child {
|
||||
type Payload = ManuallyDrop<Self>;
|
||||
#[inline]
|
||||
fn tag() -> ArenaHeaderTag {
|
||||
ArenaHeaderTag::ChildProcess
|
||||
}
|
||||
}
|
||||
impl AllocateInArena<Child> for Child {
|
||||
fn arena_allocate(self, arena: &mut Arena) -> TypedArenaPtr<Child> {
|
||||
Child::alloc(arena, ManuallyDrop::new(self))
|
||||
}
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug)]
|
||||
pub struct AllocSlab {
|
||||
@@ -556,6 +571,9 @@ unsafe fn drop_slab_in_place(value: NonNull<AllocSlab>, tag: ArenaHeaderTag) {
|
||||
ArenaHeaderTag::PipeWriter => {
|
||||
drop_typed_slab_in_place!(PipeWriter, value);
|
||||
}
|
||||
ArenaHeaderTag::ChildProcess => {
|
||||
drop_typed_slab_in_place!(Child, value);
|
||||
}
|
||||
ArenaHeaderTag::NullStream => {
|
||||
unreachable!("NullStream is never arena allocated!");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user