Skip to content

Commit

Permalink
Fix realiased streams causing close/1 to leave a dangling stream
Browse files Browse the repository at this point in the history
  • Loading branch information
adri326 committed Feb 6, 2025
1 parent 0cf46d3 commit 949d316
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 4 deletions.
22 changes: 21 additions & 1 deletion src/machine/streams.rs
Original file line number Diff line number Diff line change
Expand Up @@ -640,7 +640,7 @@ impl Stream {
}
}

pub fn options_mut(&mut self) -> &mut StreamOptions {
pub(super) fn options_mut(&mut self) -> &mut StreamOptions {
match self {
Stream::Byte(ref mut ptr) => &mut ptr.options,
Stream::InputFile(ref mut ptr) => &mut ptr.options,
Expand Down Expand Up @@ -1946,4 +1946,24 @@ mod test {
assert_eq!(results.len(), 1);
assert!(results[0].is_ok());
}

#[test]
#[cfg_attr(miri, ignore)]
fn close_realiased_stream() {
let mut machine = MachineBuilder::new().build();

let results = machine
.run_query(r#"
\+ \+ (
open("README.md", read, S, [alias(readme)]),
open(stream(S), read, _, [alias(another_alias)]),
close(S)
),
open("README.md", read, _, [alias(readme)]).
"#)
.collect::<Vec<_>>();

assert_eq!(results.len(), 1);
assert!(results[0].is_ok());
}
}
8 changes: 5 additions & 3 deletions src/machine/system_calls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5162,7 +5162,7 @@ impl Machine {

#[inline(always)]
pub(crate) fn set_stream_options(&mut self) -> CallResult {
let mut stream = self.machine_st.get_stream_or_alias(
let stream = self.machine_st.get_stream_or_alias(
self.machine_st.registers[1],
&self.indices,
atom!("open"),
Expand All @@ -5174,10 +5174,12 @@ impl Machine {
let reposition = self.machine_st.registers[4];
let stream_type = self.machine_st.registers[5];

let options =
let new_options =
self.machine_st
.get_stream_options(alias, eof_action, reposition, stream_type);
*stream.options_mut() = options;
self.indices.update_stream_options(stream, |options| {
*options = new_options;
});

Ok(())
}
Expand Down

0 comments on commit 949d316

Please sign in to comment.