libsystemd: use DEFINE_ATOMIC_REF_UNREF_FUNC or frineds where applicable
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 27 Aug 2018 05:00:01 +0000 (14:00 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 27 Aug 2018 20:09:40 +0000 (05:09 +0900)
src/libsystemd/sd-bus/sd-bus.c
src/libsystemd/sd-hwdb/sd-hwdb.c
src/libsystemd/sd-netlink/netlink-message.c
src/libsystemd/sd-netlink/sd-netlink.c

index 0da69a1..3ea71ea 100644 (file)
@@ -1567,27 +1567,7 @@ void bus_enter_closing(sd_bus *bus) {
         bus_set_state(bus, BUS_CLOSING);
 }
 
-_public_ sd_bus *sd_bus_ref(sd_bus *bus) {
-        if (!bus)
-                return NULL;
-
-        assert_se(REFCNT_INC(bus->n_ref) >= 2);
-
-        return bus;
-}
-
-_public_ sd_bus *sd_bus_unref(sd_bus *bus) {
-        unsigned i;
-
-        if (!bus)
-                return NULL;
-
-        i = REFCNT_DEC(bus->n_ref);
-        if (i > 0)
-                return NULL;
-
-        return bus_free(bus);
-}
+DEFINE_PUBLIC_ATOMIC_REF_UNREF_FUNC(sd_bus, sd_bus, bus_free);
 
 _public_ int sd_bus_is_open(sd_bus *bus) {
         assert_return(bus, -EINVAL);
index 5de716e..371dac5 100644 (file)
@@ -359,25 +359,17 @@ _public_ int sd_hwdb_new(sd_hwdb **ret) {
         return 0;
 }
 
-_public_ sd_hwdb *sd_hwdb_ref(sd_hwdb *hwdb) {
-        assert_return(hwdb, NULL);
-
-        assert_se(REFCNT_INC(hwdb->n_ref) >= 2);
+static sd_hwdb *hwdb_free(sd_hwdb *hwdb) {
+        assert(hwdb);
 
-        return hwdb;
+        if (hwdb->map)
+                munmap((void *)hwdb->map, hwdb->st.st_size);
+        safe_fclose(hwdb->f);
+        ordered_hashmap_free(hwdb->properties);
+        return mfree(hwdb);
 }
 
-_public_ sd_hwdb *sd_hwdb_unref(sd_hwdb *hwdb) {
-        if (hwdb && REFCNT_DEC(hwdb->n_ref) == 0) {
-                if (hwdb->map)
-                        munmap((void *)hwdb->map, hwdb->st.st_size);
-                safe_fclose(hwdb->f);
-                ordered_hashmap_free(hwdb->properties);
-                free(hwdb);
-        }
-
-        return NULL;
-}
+DEFINE_PUBLIC_ATOMIC_REF_UNREF_FUNC(sd_hwdb, sd_hwdb, hwdb_free)
 
 bool hwdb_validate(sd_hwdb *hwdb) {
         bool found = false;
index 23907c8..0447a8c 100644 (file)
@@ -96,13 +96,7 @@ int sd_netlink_message_request_dump(sd_netlink_message *m, int dump) {
         return 0;
 }
 
-sd_netlink_message *sd_netlink_message_ref(sd_netlink_message *m) {
-        if (!m)
-                return NULL;
-
-        assert_se(REFCNT_INC(m->n_ref) >= 2);
-        return m;
-}
+DEFINE_ATOMIC_REF_FUNC(sd_netlink_message, sd_netlink_message);
 
 sd_netlink_message *sd_netlink_message_unref(sd_netlink_message *m) {
         sd_netlink_message *t;
index c01ee73..15830d3 100644 (file)
@@ -146,56 +146,40 @@ int sd_netlink_inc_rcvbuf(sd_netlink *rtnl, size_t size) {
         return fd_inc_rcvbuf(rtnl->fd, size);
 }
 
-sd_netlink *sd_netlink_ref(sd_netlink *rtnl) {
-        assert_return(rtnl, NULL);
-        assert_return(!rtnl_pid_changed(rtnl), NULL);
+static sd_netlink *netlink_free(sd_netlink *rtnl) {
+        struct match_callback *f;
+        unsigned i;
 
-        if (rtnl)
-                assert_se(REFCNT_INC(rtnl->n_ref) >= 2);
-
-        return rtnl;
-}
-
-sd_netlink *sd_netlink_unref(sd_netlink *rtnl) {
-        if (!rtnl)
-                return NULL;
-
-        assert_return(!rtnl_pid_changed(rtnl), NULL);
-
-        if (REFCNT_DEC(rtnl->n_ref) == 0) {
-                struct match_callback *f;
-                unsigned i;
-
-                for (i = 0; i < rtnl->rqueue_size; i++)
-                        sd_netlink_message_unref(rtnl->rqueue[i]);
-                free(rtnl->rqueue);
+        assert(rtnl);
 
-                for (i = 0; i < rtnl->rqueue_partial_size; i++)
-                        sd_netlink_message_unref(rtnl->rqueue_partial[i]);
-                free(rtnl->rqueue_partial);
+        for (i = 0; i < rtnl->rqueue_size; i++)
+                sd_netlink_message_unref(rtnl->rqueue[i]);
+        free(rtnl->rqueue);
 
-                free(rtnl->rbuffer);
+        for (i = 0; i < rtnl->rqueue_partial_size; i++)
+                sd_netlink_message_unref(rtnl->rqueue_partial[i]);
+        free(rtnl->rqueue_partial);
 
-                hashmap_free_free(rtnl->reply_callbacks);
-                prioq_free(rtnl->reply_callbacks_prioq);
+        free(rtnl->rbuffer);
 
-                sd_event_source_unref(rtnl->io_event_source);
-                sd_event_source_unref(rtnl->time_event_source);
-                sd_event_unref(rtnl->event);
+        hashmap_free_free(rtnl->reply_callbacks);
+        prioq_free(rtnl->reply_callbacks_prioq);
 
-                while ((f = rtnl->match_callbacks)) {
-                        sd_netlink_remove_match(rtnl, f->type, f->callback, f->userdata);
-                }
+        sd_event_source_unref(rtnl->io_event_source);
+        sd_event_source_unref(rtnl->time_event_source);
+        sd_event_unref(rtnl->event);
 
-                hashmap_free(rtnl->broadcast_group_refs);
+        while ((f = rtnl->match_callbacks))
+                sd_netlink_remove_match(rtnl, f->type, f->callback, f->userdata);
 
-                safe_close(rtnl->fd);
-                free(rtnl);
-        }
+        hashmap_free(rtnl->broadcast_group_refs);
 
-        return NULL;
+        safe_close(rtnl->fd);
+        return mfree(rtnl);
 }
 
+DEFINE_ATOMIC_REF_UNREF_FUNC(sd_netlink, sd_netlink, netlink_free);
+
 static void rtnl_seal_message(sd_netlink *rtnl, sd_netlink_message *m) {
         assert(rtnl);
         assert(!rtnl_pid_changed(rtnl));