summaryrefslogtreecommitdiffstats
path: root/src/module.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-06-19 01:01:09 +0000
committerLennart Poettering <lennart@poettering.net>2004-06-19 01:01:09 +0000
commit56f8c953dd609bc5c94011fe4acdd9ef6b875747 (patch)
tree9fb30d4fa48eea2b66f81bd84e16ebc22a9b09c6 /src/module.c
parent382e7aefd471a4600010a04e6497d4bfd2fd8663 (diff)
some more work on the cli
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@24 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src/module.c')
-rw-r--r--src/module.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/module.c b/src/module.c
index 0be7f5ed..c6de1751 100644
--- a/src/module.c
+++ b/src/module.c
@@ -17,6 +17,9 @@ struct module* module_load(struct core *c, const char *name, const char *argumen
m = malloc(sizeof(struct module));
assert(m);
+ m->name = strdup(name);
+ m->argument = argument ? strdup(argument) : NULL;
+
if (!(m->dl = lt_dlopenext(name)))
goto fail;
@@ -26,8 +29,6 @@ struct module* module_load(struct core *c, const char *name, const char *argumen
if (!(m->done = lt_dlsym(m->dl, "module_done")))
goto fail;
- m->name = strdup(name);
- m->argument = argument ? strdup(argument) : NULL;
m->userdata = NULL;
m->core = c;
@@ -127,3 +128,28 @@ char *module_list_to_string(struct core *c) {
return strbuf_tostring_free(s);
}
+
+
+struct once_info {
+ struct core *core;
+ uint32_t index;
+};
+
+
+void module_unload_once_callback(void *userdata) {
+ struct once_info *i = userdata;
+ assert(i);
+ module_unload_by_index(i->core, i->index);
+ free(i);
+}
+
+void module_unload_request(struct core *c, struct module *m) {
+ struct once_info *i;
+ assert(c && m);
+
+ i = malloc(sizeof(struct once_info));
+ assert(i);
+ i->core = c;
+ i->index = m->index;
+ mainloop_once(c->mainloop, module_unload_once_callback, i);
+}