On Tue, 01.09.15 12:56, eshark (eshar...@163.com) wrote: > > Hi, all > > > I wonder why the sd_bus_slot_unref() always returns NULL? I expect that > I can check whether the slot->n_ref ==0 by checking its return value. > That is > > > _public_ sd_bus_slot* sd_bus_slot_unref(sd_bus_slot *slot) { > > if (!slot) > return NULL; > > assert(slot->n_ref > 0); > > if (slot->n_ref > 1) { > slot->n_ref --; > > //return NULL; > retrun slot; > } > > bus_slot_disconnect(slot); > free(slot->description); > free(slot); > > return NULL; > > } > > > As the libsystem doesn't provide some API for the application to get the > n_ref from the sd_bus_slot, maybe we can provide the same feature this way?
As Jakub already pointed out: the idea is that after unreffing your reference it is gone, and hence should be invalidated to NULL. Thus, if you want to get rid of a reference you do this: foo = sd_bus_slot_unref(foo); Or to say this differently: sd_bus_slot_ref() and sd_bus_slot_unref() always return the the ref you passed in. In sd_bus_slot_ref() it is valid afterwards, hence we return the same value as passed in. However, in sd_bus_slot_unref() that specific ref is not valid anymore, hence we return it as NULL. What would be the usecase for querying the current ref counter? Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel