Mark select channel as dirty on mux_init()
Ensures that the select callback will be called on the propagation phase, immediately setting the right output. Otherwise the mux won't be updated until the select channel sets a new value.
This commit is contained in:
parent
2b84318ebe
commit
b265442b8c
@ -192,6 +192,13 @@ mux_init(struct mux *mux,
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Mark the select channel as dirty, so it runs the select
|
||||
* callback even if it doesn't have a new value */
|
||||
if (chan_dirty(select) != 0) {
|
||||
err("chan_dirty failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -8,3 +8,4 @@ ovni_test(task-types.c MP)
|
||||
ovni_test(blocking.c MP)
|
||||
ovni_test(ss-mismatch.c SHOULD_FAIL
|
||||
REGEX "thread [0-9]\\+ ended with 1 stacked nanos6 subsystems")
|
||||
ovni_test(delayed-connect-ss.c)
|
||||
|
28
test/emu/nanos6/delayed-connect-ss.c
Normal file
28
test/emu/nanos6/delayed-connect-ss.c
Normal file
@ -0,0 +1,28 @@
|
||||
/* Copyright (c) 2023 Barcelona Supercomputing Center (BSC)
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later */
|
||||
|
||||
#include "instr_nanos6.h"
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
instr_start(0, 1);
|
||||
|
||||
/* Until here, the nanos6 model has not been connected to the
|
||||
* patchbay yet. The next event will cause the subsystem mux to
|
||||
* be connected to the patchbay. We need to ensure that at that
|
||||
* moment the select channel is evaluated, otherwise the mux
|
||||
* will remain selecting a null input until the thread state
|
||||
* changes. */
|
||||
|
||||
/* FIXME: We should be able to test that after emitting the
|
||||
* nanos6 event the emulator follows some properties. */
|
||||
|
||||
instr_nanos6_worker_loop_enter();
|
||||
|
||||
instr_nanos6_worker_loop_exit();
|
||||
|
||||
instr_end();
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user