udevd: provide worker_hash_ops and drop manager_workers_free()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 18 Dec 2018 06:03:50 +0000 (15:03 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 12 Jan 2019 00:32:20 +0000 (09:32 +0900)
src/udev/udevd.c

index 24f4824..837e13e 100644 (file)
@@ -187,18 +187,7 @@ static void worker_free(struct worker *worker) {
 }
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(struct worker *, worker_free);
-
-static void manager_workers_free(Manager *manager) {
-        struct worker *worker;
-        Iterator i;
-
-        assert(manager);
-
-        HASHMAP_FOREACH(worker, manager->workers, i)
-                worker_free(worker);
-
-        manager->workers = hashmap_free(manager->workers);
-}
+DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(worker_hash_op, void, trivial_hash_func, trivial_compare_func, struct worker, worker_free);
 
 static int worker_new(struct worker **ret, Manager *manager, sd_device_monitor *worker_monitor, pid_t pid) {
         _cleanup_(worker_freep) struct worker *worker = NULL;
@@ -222,7 +211,7 @@ static int worker_new(struct worker **ret, Manager *manager, sd_device_monitor *
                 .pid = pid,
         };
 
-        r = hashmap_ensure_allocated(&manager->workers, NULL);
+        r = hashmap_ensure_allocated(&manager->workers, &worker_hash_op);
         if (r < 0)
                 return r;
 
@@ -296,7 +285,7 @@ static void manager_clear_for_worker(Manager *manager) {
 
         manager->event = sd_event_unref(manager->event);
 
-        manager_workers_free(manager);
+        manager->workers = hashmap_free(manager->workers);
         event_queue_cleanup(manager, EVENT_UNDEF);
 
         manager->monitor = sd_device_monitor_unref(manager->monitor);