summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/til_stream.c15
-rw-r--r--src/til_stream.h2
2 files changed, 12 insertions, 5 deletions
diff --git a/src/til_stream.c b/src/til_stream.c
index 021e0d4..0f35a17 100644
--- a/src/til_stream.c
+++ b/src/til_stream.c
@@ -646,9 +646,10 @@ int til_stream_find_module_contexts(til_stream_t *stream, const char *path, size
}
-void til_stream_gc_module_contexts(til_stream_t *stream)
+/* returns count of remaining contexts or zero if none remain */
+unsigned til_stream_gc_module_contexts(til_stream_t *stream)
{
- unsigned freed;
+ unsigned freed, skipped;
assert(stream);
@@ -668,6 +669,7 @@ void til_stream_gc_module_contexts(til_stream_t *stream)
*/
do {
freed = 0;
+ skipped = 0;
for (size_t b = 0; b < TIL_STREAM_CTXT_BUCKETS_COUNT; b++) {
til_stream_module_context_t *c, *c_prev, *c_next;
@@ -684,6 +686,7 @@ void til_stream_gc_module_contexts(til_stream_t *stream)
if (i < c->n_module_contexts) {
c_prev = c;
+ skipped++;
continue;
}
@@ -697,13 +700,17 @@ void til_stream_gc_module_contexts(til_stream_t *stream)
freed = 1;
}
- if (c_prev)
+
+ if (c_prev) {
c_prev->next = c_next;
- else
+ } else {
stream->module_context_buckets[b] = c_next;
+ }
}
}
} while (freed);
+
+ return skipped;
}
diff --git a/src/til_stream.h b/src/til_stream.h
index 5473aec..eab078c 100644
--- a/src/til_stream.h
+++ b/src/til_stream.h
@@ -74,7 +74,7 @@ int til_stream_for_each_module_context(til_stream_t *stream, til_stream_module_c
int til_stream_register_module_contexts(til_stream_t *stream, size_t n_contexts, til_module_context_t **contexts);
int til_stream_find_module_contexts(til_stream_t *stream, const char *path, size_t n_contexts, til_module_context_t **res_contexts);
-void til_stream_gc_module_contexts(til_stream_t *stream);
+unsigned til_stream_gc_module_contexts(til_stream_t *stream);
void til_stream_fprint_module_contexts(til_stream_t *stream, FILE *out);
#endif
© All Rights Reserved