sd_device_ref - Man Page

Create or destroy references to a device object

Synopsis

#include <systemd/sd-device​.h>

sd_device* sd_device_ref(sd_device *device);

sd_device* sd_device_unref(sd_device *device);

void sd_device_unrefp(sd_device **device);

sd_device_ref() increases the internal reference counter of device by one​.

sd_device_unref() decreases the internal reference counter of device by one​. Once the reference count has dropped to zero, device is destroyed and cannot be used anymore, so further calls to sd_device_ref() or sd_device_unref() are illegal​.

sd_device_unrefp() is similar to sd_device_unref() but takes a pointer to a pointer to an sd_device object​. This call is useful in conjunction with GCC's and LLVM's Clean-up Variable Attribute[1]​. Note that this function is defined as an inline function​. Use a declaration like the following, in order to allocate a device object that is freed automatically as the code block is left:

{
  __attribute__((cleanup(sd_device_unrefp))) sd_device *device = NULL;
  int r;
  ​...
  r = sd_device_new_from_syspath(&device, "​...");
  if (r < 0) {
    errno = -r;
    fprintf(stderr, "Failed to allocate device: %m\n");
  }
  ​...
}

sd_device_ref() and sd_device_unref() execute no operation if the argument is NULL​. sd_device_unrefp() will first dereference its argument, which must not be NULL, and will execute no operation if that is NULL​.

Return Value

sd_device_ref() always returns the argument, and sd_device_unref() always returns NULL​.

History

sd_device_ref(), sd_device_unref(), and sd_device_unrefp() were added in version 251​.

Notes

1.

Clean-up Variable Attribute
https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html

Referenced By

sd-device(3), sd_device_enumerator_add_match_parent(3), sd_device_enumerator_get_device_first(3), sd_device_enumerator_new(3), systemd.directives(7), systemd.index(7).

The man pages sd_device_unref(3) and sd_device_unrefp(3) are aliases of sd_device_ref(3).

systemd 262~rc2