Skip to content

Commit 76505ea

Browse files
committed
writer: Use a memory buffer when writes to disk disabled
Signed-off-by: Diogo Behrens <[email protected]>
1 parent b5c152e commit 76505ea

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed

src/writer.c

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,20 @@ struct writer_impl {
2525
static void
2626
get_trace_(struct writer_impl *impl)
2727
{
28-
if (coldtrace_writes_disabled())
29-
return;
3028
assert(impl->initd);
3129
if (impl->buffer) {
3230
return;
3331
}
34-
impl->enumerator = 0;
35-
impl->size = coldtrace_get_trace_size();
36-
impl->offset = 0;
32+
33+
impl->size = coldtrace_get_trace_size();
34+
impl->offset = 0;
35+
impl->enumerator = 0;
36+
37+
if (coldtrace_writes_disabled()) {
38+
impl->buffer = malloc(impl->size);
39+
return;
40+
}
41+
3742
const char *pattern = coldtrace_get_file_pattern();
3843
char file_name[strlen(pattern) + 20];
3944
sprintf(file_name, pattern, impl->tid, impl->enumerator);
@@ -59,10 +64,19 @@ get_trace_(struct writer_impl *impl)
5964
static void
6065
new_trace_(struct writer_impl *impl)
6166
{
62-
if (coldtrace_writes_disabled())
67+
if (coldtrace_writes_disabled()) {
68+
size_t trace_size = coldtrace_get_trace_size();
69+
if (impl->size != trace_size) {
70+
impl->size = trace_size;
71+
free(impl->buffer);
72+
impl->buffer = malloc(impl->size);
73+
}
74+
impl->offset = 0;
6375
return;
76+
}
6477
coldtrace_writer_close(impl->buffer, impl->offset, impl->tid);
6578
munmap(impl->buffer, impl->size);
79+
6680
impl->enumerator = (impl->enumerator + 1) % coldtrace_get_max();
6781
impl->size = coldtrace_get_trace_size();
6882
impl->offset = 0;
@@ -83,15 +97,12 @@ new_trace_(struct writer_impl *impl)
8397

8498

8599
DICE_HIDE void *
86-
coldtrace_writer_reserve(struct coldtrace_writer *ct, size_t size)
100+
coldtrace_writer_reserve(struct coldtrace_writer *writer, size_t size)
87101
{
88-
if (coldtrace_writes_disabled())
89-
return NULL;
90-
91-
struct writer_impl *impl = (struct writer_impl *)ct;
102+
struct writer_impl *impl = (struct writer_impl *)writer;
92103
get_trace_(impl);
93-
if (impl->buffer == MAP_FAILED) {
94-
return false;
104+
if (impl->buffer == MAP_FAILED || impl->buffer == NULL) {
105+
return NULL;
95106
}
96107

97108
// check if size of trace was reduced
@@ -130,6 +141,9 @@ coldtrace_writer_fini(struct coldtrace_writer *ct)
130141
if (!impl->initd)
131142
return;
132143
coldtrace_writer_close(impl->buffer, impl->offset, impl->tid);
144+
145+
if (coldtrace_writes_disabled())
146+
free(impl->buffer);
133147
}
134148

135149

0 commit comments

Comments
 (0)