store child process in machine state
This commit is contained in:
committed by
Bennet Bleßmann
parent
43dd1587fb
commit
1ee4f7a55f
@@ -20,9 +20,11 @@ use crate::parser::dashu::Integer;
|
||||
|
||||
use indexmap::IndexMap;
|
||||
|
||||
use std::collections::BTreeMap;
|
||||
use std::convert::TryFrom;
|
||||
use std::fmt;
|
||||
use std::ops::{Index, IndexMut, Range};
|
||||
use std::process::Child;
|
||||
use std::sync::Arc;
|
||||
|
||||
pub(crate) type Registers = [HeapCellValue; MAX_ARITY + 1];
|
||||
@@ -97,6 +99,7 @@ pub struct MachineState {
|
||||
pub(crate) unify_fn: fn(&mut MachineState),
|
||||
pub(crate) bind_fn: fn(&mut MachineState, Ref, HeapCellValue),
|
||||
pub(crate) run_cleaners_fn: fn(&mut Machine) -> bool,
|
||||
pub(crate) child_processes: BTreeMap<u32, Child>,
|
||||
}
|
||||
|
||||
impl fmt::Debug for MachineState {
|
||||
|
||||
@@ -19,6 +19,7 @@ use crate::types::*;
|
||||
use indexmap::IndexSet;
|
||||
|
||||
use std::cmp::Ordering;
|
||||
use std::collections::BTreeMap;
|
||||
use std::convert::TryFrom;
|
||||
|
||||
impl MachineState {
|
||||
@@ -67,6 +68,7 @@ impl MachineState {
|
||||
unify_fn: MachineState::unify,
|
||||
bind_fn: MachineState::bind,
|
||||
run_cleaners_fn: |_| false,
|
||||
child_processes: BTreeMap::new(),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8497,12 +8497,16 @@ impl Machine {
|
||||
match command.spawn() {
|
||||
Ok(child) => {
|
||||
let pid = child.id();
|
||||
|
||||
self.machine_st.child_processes.insert(pid, child);
|
||||
|
||||
self.machine_st.bind(
|
||||
pid_r
|
||||
.as_var()
|
||||
.expect("invalid values should have been rejected on the prolog side"),
|
||||
fixnum_as_cell!(Fixnum::build_with(pid)),
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Err(_) => {
|
||||
|
||||
Reference in New Issue
Block a user