Fix segfault reading empty streams
The check_clock_gate() was trying to access to the first event in all streams. However, streams that are empty don't have any event, so they cause a NULL dereference. Skipping not active streams avoids the problem.
This commit is contained in:
parent
0db35980a0
commit
0df018cf5f
@ -73,6 +73,9 @@ check_clock_gate(struct trace *trace)
|
|||||||
|
|
||||||
struct stream *stream;
|
struct stream *stream;
|
||||||
DL_FOREACH(trace->streams, stream) {
|
DL_FOREACH(trace->streams, stream) {
|
||||||
|
if (!stream->active)
|
||||||
|
continue;
|
||||||
|
|
||||||
struct ovni_ev *oev = stream_ev(stream);
|
struct ovni_ev *oev = stream_ev(stream);
|
||||||
int64_t sclock = stream_evclock(stream, oev);
|
int64_t sclock = stream_evclock(stream, oev);
|
||||||
|
|
||||||
|
@ -17,3 +17,4 @@ test_emu(no-cpus.c SHOULD_FAIL REGEX "loom .* has no physical CPUs")
|
|||||||
test_emu(sort-cpus-by-loom.c MP)
|
test_emu(sort-cpus-by-loom.c MP)
|
||||||
test_emu(sort-cpus-by-rank.c MP)
|
test_emu(sort-cpus-by-rank.c MP)
|
||||||
test_emu(tracedir-subdir.c MP DRIVER "tracedir-subdir.driver.sh")
|
test_emu(tracedir-subdir.c MP DRIVER "tracedir-subdir.driver.sh")
|
||||||
|
test_emu(empty-stream.c SHOULD_FAIL REGEX "model_ovni_finish: thread .* is not dead")
|
||||||
|
19
test/emu/ovni/empty-stream.c
Normal file
19
test/emu/ovni/empty-stream.c
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/* Copyright (c) 2023 Barcelona Supercomputing Center (BSC)
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later */
|
||||||
|
|
||||||
|
#include <ovni.h>
|
||||||
|
#include "instr.h"
|
||||||
|
|
||||||
|
/* Create a trace where a stream doesn't contain any event */
|
||||||
|
|
||||||
|
int
|
||||||
|
main(void)
|
||||||
|
{
|
||||||
|
instr_start(0, 1);
|
||||||
|
|
||||||
|
/* Don't flush the thread to create an empty stream */
|
||||||
|
|
||||||
|
ovni_proc_fini();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user