diff --git a/src/modules/_Stdio/buffer.cmod b/src/modules/_Stdio/buffer.cmod index e6cdc58d635a481350920cbc86506730fd0df681..ed42aa52248e4d17ada8659fa15592d0cce2f5df 100644 --- a/src/modules/_Stdio/buffer.cmod +++ b/src/modules/_Stdio/buffer.cmod @@ -455,14 +455,16 @@ PIKECLASS Buffer PMOD_EXPORT void io_actually_trigger_output( Buffer *io ) { - if (io->output.tu.named_type == PIKE_T_FUNCTION) { - if (UNLIKELY(!io->output.u.object->prog)) { - /* Destructed object. */ - free_svalue(&io->output); - return; - } + if (UNLIKELY(!io->output.u.object->prog)) { + /* Destructed object. */ + free_svalue(&io->output); + SET_SVAL(io->output, PIKE_T_INT, NUMBER_NUMBER, integer, 0); + return; + } + if ( io->output.u.object ) { move_svalue(Pike_sp++, &io->output); + SET_SVAL(io->output, PIKE_T_INT, NUMBER_NUMBER, integer, 0); apply_svalue(Pike_sp-1, 0); pop_n_elems(2); } @@ -988,8 +990,11 @@ PIKECLASS Buffer if (f) assign_svalue(&io->output, f); else { - if (io->output.tu.named_type == PIKE_T_FUNCTION) + if (io->output.u.object) { free_svalue(&io->output); + io->output.u.object = 0; // free_svalue() puts in -1 + } + SET_SVAL(io->output, PIKE_T_INT, NUMBER_NUMBER, integer, 0); } }