try to vacuum a little when nothing is going on
authorLennart Poettering <lennart@poettering.net>
Wed, 25 Feb 2009 08:13:19 +0000 (09:13 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 25 Feb 2009 08:13:19 +0000 (09:13 +0100)
src/pulsecore/core.c
src/pulsecore/core.h
src/pulsecore/sink-input.c
src/pulsecore/source-output.c

index eef967a..c064e67 100644 (file)
@@ -250,3 +250,14 @@ int pa_core_exit(pa_core *c, pa_bool_t force, int retval) {
     c->mainloop->quit(c->mainloop, retval);
     return 0;
 }
+
+void pa_core_maybe_vacuum(pa_core *c) {
+    pa_assert(c);
+
+    if (!pa_idxset_isempty(c->sink_inputs) ||
+        !pa_idxset_isempty(c->source_outputs))
+        return;
+
+    pa_log_debug("Hmm, no streams around, trying to vacuum.");
+    pa_mempool_vacuum(c->mempool);
+}
index 7660bd3..093fa8f 100644 (file)
@@ -171,4 +171,6 @@ void pa_core_check_idle(pa_core *c);
 
 int pa_core_exit(pa_core *c, pa_bool_t force, int retval);
 
+void pa_core_maybe_vacuum(pa_core *c);
+
 #endif
index 544bb33..34de9bb 100644 (file)
@@ -468,6 +468,8 @@ void pa_sink_input_unlink(pa_sink_input *i) {
         i->sink = NULL;
     }
 
+    pa_core_maybe_vacuum(i->core);
+
     pa_sink_input_unref(i);
 }
 
index d8a2363..d99f79c 100644 (file)
@@ -335,6 +335,8 @@ void pa_source_output_unlink(pa_source_output*o) {
         o->source = NULL;
     }
 
+    pa_core_maybe_vacuum(o->core);
+
     pa_source_output_unref(o);
 }