Maintain a pool of modules alive
Based on previous implementation by
Gustavo Sverzut Barbieri <barbieri@profusion.mobi>
diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c
index 9c8a627..432f453 100644
--- a/libkmod/libkmod-module.c
+++ b/libkmod/libkmod-module.c
@@ -144,6 +144,12 @@
path_to_modname(name, name_norm, &namelen);
+ m = kmod_pool_get_module(ctx, name_norm);
+ if (m != NULL) {
+ *mod = kmod_module_ref(m);
+ return 0;
+ }
+
m = calloc(1, sizeof(*m) + namelen + 1);
if (m == NULL) {
free(m);
@@ -154,6 +160,8 @@
memcpy(m->name, name_norm, namelen + 1);
m->refcount = 1;
+ kmod_pool_add_module(ctx, m);
+
*mod = m;
return 0;
@@ -178,6 +186,12 @@
path_to_modname(path, name, &namelen);
+ m = kmod_pool_get_module(ctx, name);
+ if (m != NULL) {
+ *mod = kmod_module_ref(m);
+ return 0;
+ }
+
m = calloc(1, sizeof(*m) + namelen + 1);
if (m == NULL)
return -errno;
@@ -193,6 +207,8 @@
memcpy(m->name, name, namelen);
m->refcount = 1;
+ kmod_pool_add_module(ctx, m);
+
*mod = m;
return 0;