chiark / gitweb /
networkd: manager - don't leak kmod context
authorTom Gundersen <teg@jklm.no>
Mon, 12 May 2014 15:11:13 +0000 (17:11 +0200)
committerTom Gundersen <teg@jklm.no>
Mon, 12 May 2014 15:37:58 +0000 (17:37 +0200)
Also, keep the kmod_new internal to networkd-manager.c

src/libsystemd-network/network-internal.c
src/network/networkd-manager.c
src/network/networkd.c
src/network/networkd.h

index cf577e54a4ee9b72de6ba1408881a6d9396fd70d..f3dc42f6dd94660645c44a9ce2be84ae59a232cc 100644 (file)
@@ -353,6 +353,8 @@ int load_module(struct kmod_ctx *ctx, const char *mod_name) {
                         log_error("Failed to insert '%s': %s", kmod_module_get_name(mod),
                                   strerror(-r));
                 }
                         log_error("Failed to insert '%s': %s", kmod_module_get_name(mod),
                                   strerror(-r));
                 }
+
+                kmod_module_unref(mod);
         }
 
         kmod_module_unref_list(modlist);
         }
 
         kmod_module_unref_list(modlist);
index cfa3a9900a61a095e3616a8b013e51870cd47ddc..cc55f9a17a0307d74ef9c901c2bc3e0c2cf6bf53 100644 (file)
@@ -118,6 +118,10 @@ int manager_new(Manager **ret) {
                         return -ENOMEM;
         }
 
                         return -ENOMEM;
         }
 
+        m->kmod_ctx = kmod_new(NULL, NULL);
+        if (!m->kmod_ctx)
+                return -ENOMEM;
+
         m->links = hashmap_new(uint64_hash_func, uint64_compare_func);
         if (!m->links)
                 return -ENOMEM;
         m->links = hashmap_new(uint64_hash_func, uint64_compare_func);
         if (!m->links)
                 return -ENOMEM;
@@ -144,6 +148,7 @@ void manager_free(Manager *m) {
 
         free(m->state_file);
 
 
         free(m->state_file);
 
+        kmod_unref(m->kmod_ctx);
         udev_monitor_unref(m->udev_monitor);
         udev_unref(m->udev);
         sd_bus_unref(m->bus);
         udev_monitor_unref(m->udev_monitor);
         udev_unref(m->udev);
         sd_bus_unref(m->bus);
@@ -552,18 +557,3 @@ finish:
 
         return r;
 }
 
         return r;
 }
-
-int manager_init_kmod_ctx(Manager *m) {
-        struct kmod_ctx *ctx;
-
-        assert(m);
-
-        ctx = kmod_new(NULL, NULL);
-        if (!ctx) {
-                return -ENOMEM;
-        }
-
-        m->kmod_ctx = ctx;
-
-        return 0;
-}
index 39e1b2af02d4304c7bd915e715d84583b209b4f1..6b3bf12a4cf3e32299d4dcb52dab159b204cd97f 100644 (file)
@@ -87,12 +87,6 @@ int main(int argc, char *argv[]) {
                 goto out;
         }
 
                 goto out;
         }
 
-        r = manager_init_kmod_ctx(m);
-        if (r < 0) {
-                log_error("Could not init kmod context: %s", strerror(-r));
-                goto out;
-        }
-
         r = manager_rtnl_enumerate_links(m);
         if (r < 0) {
                 log_error("Could not enumerate links: %s", strerror(-r));
         r = manager_rtnl_enumerate_links(m);
         if (r < 0) {
                 log_error("Could not enumerate links: %s", strerror(-r));
index e32cf5d9b29f0a0228419d47bf59590d9e145264..11d0056c9c20c98ba7e74184469c51297878bd2f 100644 (file)
@@ -277,7 +277,6 @@ int manager_bus_listen(Manager *m);
 
 int manager_update_resolv_conf(Manager *m);
 int manager_save(Manager *m);
 
 int manager_update_resolv_conf(Manager *m);
 int manager_save(Manager *m);
-int manager_init_kmod_ctx(Manager *m);
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
 #define _cleanup_manager_free_ _cleanup_(manager_freep)
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
 #define _cleanup_manager_free_ _cleanup_(manager_freep)