]> code.delx.au - pulseaudio/blobdiff - src/modules/module-suspend-on-idle.c
Remove pa_bool_t and replace it with bool.
[pulseaudio] / src / modules / module-suspend-on-idle.c
index e7242628edab9a80dd1e47e543c686297a10d8b6..6d49acb31f275967373205f19cf711b53aaa0f05 100644 (file)
 PA_MODULE_AUTHOR("Lennart Poettering");
 PA_MODULE_DESCRIPTION("When a sink/source is idle for too long, suspend it");
 PA_MODULE_VERSION(PACKAGE_VERSION);
-PA_MODULE_LOAD_ONCE(TRUE);
-PA_MODULE_USAGE(
-        "timeout=<timeout> "
-        "mempool_vacuum=<vacuum memory if all sinks and sources are suspended?>");
+PA_MODULE_LOAD_ONCE(true);
+PA_MODULE_USAGE("timeout=<timeout>");
 
 static const char* const valid_modargs[] = {
     "timeout",
-    "mempool_vacuum",
     NULL,
 };
 
@@ -73,8 +70,6 @@ struct userdata {
         *source_output_move_finish_slot,
         *sink_input_state_changed_slot,
         *source_output_state_changed_slot;
-
-    pa_bool_t mempool_vacuum:1;
 };
 
 struct device_info {
@@ -85,29 +80,6 @@ struct device_info {
     pa_time_event *time_event;
 };
 
-static void check_meempool_vacuum(struct device_info *d) {
-    pa_sink *si;
-    pa_source *so;
-    uint32_t idx;
-
-    pa_assert(d);
-    pa_assert(d->userdata);
-    pa_assert(d->userdata->core);
-
-    idx = 0;
-    PA_IDXSET_FOREACH(si, d->userdata->core->sinks, idx)
-        if (pa_sink_get_state(si) != PA_SINK_SUSPENDED)
-            return;
-
-    idx = 0;
-    PA_IDXSET_FOREACH(so, d->userdata->core->sources, idx)
-        if (pa_source_get_state(so) != PA_SOURCE_SUSPENDED)
-            return;
-
-    pa_log_info("All sinks and sources are suspended, vacuuming memory");
-    pa_mempool_vacuum(d->userdata->core->mempool);
-}
-
 static void timeout_cb(pa_mainloop_api*a, pa_time_event* e, const struct timeval *t, void *userdata) {
     struct device_info *d = userdata;
 
@@ -117,16 +89,14 @@ static void timeout_cb(pa_mainloop_api*a, pa_time_event* e, const struct timeval
 
     if (d->sink && pa_sink_check_suspend(d->sink) <= 0 && !(d->sink->suspend_cause & PA_SUSPEND_IDLE)) {
         pa_log_info("Sink %s idle for too long, suspending ...", d->sink->name);
-        pa_sink_suspend(d->sink, TRUE, PA_SUSPEND_IDLE);
-        if (d->userdata->mempool_vacuum)
-            check_meempool_vacuum(d);
+        pa_sink_suspend(d->sink, true, PA_SUSPEND_IDLE);
+        pa_core_maybe_vacuum(d->userdata->core);
     }
 
     if (d->source && pa_source_check_suspend(d->source) <= 0 && !(d->source->suspend_cause & PA_SUSPEND_IDLE)) {
         pa_log_info("Source %s idle for too long, suspending ...", d->source->name);
-        pa_source_suspend(d->source, TRUE, PA_SUSPEND_IDLE);
-        if (d->userdata->mempool_vacuum)
-            check_meempool_vacuum(d);
+        pa_source_suspend(d->source, true, PA_SUSPEND_IDLE);
+        pa_core_maybe_vacuum(d->userdata->core);
     }
 }
 
@@ -158,15 +128,13 @@ static void resume(struct device_info *d) {
     d->userdata->core->mainloop->time_restart(d->time_event, NULL);
 
     if (d->sink) {
-        pa_sink_suspend(d->sink, FALSE, PA_SUSPEND_IDLE);
-
-        pa_log_debug("Sink %s becomes busy.", d->sink->name);
+        pa_log_debug("Sink %s becomes busy, resuming.", d->sink->name);
+        pa_sink_suspend(d->sink, false, PA_SUSPEND_IDLE);
     }
 
     if (d->source) {
-        pa_source_suspend(d->source, FALSE, PA_SUSPEND_IDLE);
-
-        pa_log_debug("Source %s becomes busy.", d->source->name);
+        pa_log_debug("Source %s becomes busy, resuming.", d->source->name);
+        pa_source_suspend(d->source, false, PA_SUSPEND_IDLE);
     }
 }
 
@@ -448,7 +416,6 @@ int pa__init(pa_module*m) {
     pa_modargs *ma = NULL;
     struct userdata *u;
     uint32_t timeout = 5;
-    pa_bool_t mempool_vacuum = FALSE;
     uint32_t idx;
     pa_sink *sink;
     pa_source *source;
@@ -465,21 +432,15 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
-    if (pa_modargs_get_value_boolean(ma, "mempool_vacuum", &mempool_vacuum) < 0) {
-        pa_log("Failed to parse mempool_vacuum boolean parameter.");
-        goto fail;
-    }
-
     m->userdata = u = pa_xnew(struct userdata, 1);
     u->core = m->core;
     u->timeout = timeout;
     u->device_infos = pa_hashmap_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
-    u->mempool_vacuum = mempool_vacuum;
 
-    for (sink = pa_idxset_first(m->core->sinks, &idx); sink; sink = pa_idxset_next(m->core->sinks, &idx))
+    PA_IDXSET_FOREACH(sink, m->core->sinks, idx)
         device_new_hook_cb(m->core, PA_OBJECT(sink), u);
 
-    for (source = pa_idxset_first(m->core->sources, &idx); source; source = pa_idxset_next(m->core->sources, &idx))
+    PA_IDXSET_FOREACH(source, m->core->sources, idx)
         device_new_hook_cb(m->core, PA_OBJECT(source), u);
 
     u->sink_new_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_PUT], PA_HOOK_NORMAL, (pa_hook_cb_t) device_new_hook_cb, u);
@@ -513,7 +474,6 @@ fail:
 
 void pa__done(pa_module*m) {
     struct userdata *u;
-    struct device_info *d;
 
     pa_assert(m);
 
@@ -558,10 +518,7 @@ void pa__done(pa_module*m) {
     if (u->source_output_state_changed_slot)
         pa_hook_slot_free(u->source_output_state_changed_slot);
 
-    while ((d = pa_hashmap_steal_first(u->device_infos)))
-        device_info_free(d);
-
-    pa_hashmap_free(u->device_infos, NULL, NULL);
+    pa_hashmap_free(u->device_infos, (pa_free_cb_t) device_info_free);
 
     pa_xfree(u);
 }