---
name: "sd_bus_slot_set_userdata"
section: "3"
platform: "linux"
package: "systemd-libs"
version: "262.1-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/sd_bus_slot_set_userdata"
---

# sd\_bus\_slot\_set\_userdata(3)

Set and query the value in the "userdata" field

## NAME

sd\_bus\_slot\_set\_userdata, sd\_bus\_slot\_get\_userdata - Set and query the value in the "userdata" field

## SYNOPSIS

```
#include <systemd/sd-bus.h>
```

**void\* sd\_bus\_slot\_set\_userdata(sd\_bus\_slot\*** *slot***, void\*** *userdata***);**

**void\* sd\_bus\_slot\_get\_userdata(sd\_bus\_slot\*** *slot***);**

## DESCRIPTION

The userdata pointer allows data to be passed between the point where a callback is registered, for example when a filter is added using [**sd\_bus\_add\_filter**(3)](/sd_bus_add_filter/3.md) or an asynchronous function call is made using [**sd\_bus\_call\_async**(3)](/sd_bus_call_async/3.md), and the point where the callback is called, without having any global state. The pointer has type **void\*** and is not used by the sd-bus functions in any way, except to pass to the callback function.

Usually, the userdata field is set when the slot object is initially registered. **sd\_bus\_slot\_set\_userdata()** may be used to change it later for the bus slot object *slot*. Previous value of the field is returned. The argument and returned value may be **NULL**. It will be passed as the *userdata* argument to the callback function attached to the slot.

**sd\_bus\_slot\_set\_userdata()** gets the value of the userdata field in the bus slot object *slot*.

## RETURN VALUE

On success, these functions return the value of the userdata field before the function call. If the *slot* object is **NULL**, **NULL** will be returned to signify an error, but this is not distinguishable from the userdata field value being **NULL**.

## NOTES

Functions described here are available as a shared library, which can be compiled against and linked to with the **libsystemd** [**pkg-config**(1)](/pkg-config/1.md) file.

All functions listed here are thread-agnostic and only a single thread may operate on a given object at any given time. Different threads may access the same object at different times. Multiple independent objects may be used from different threads in parallel.

The code described here uses [**getenv**(3)](/getenv/3.md), which is declared to be not multi-thread-safe. This means that the code calling the functions described here must not call [**setenv**(3)](/setenv/3.md) from a parallel thread. It is recommended to only do calls to **setenv()** from an early phase of the program when no other threads have been started.

## HISTORY

**sd\_bus\_slot\_set\_userdata()** and **sd\_bus\_slot\_get\_userdata()** were added in version 240.

## SEE ALSO

[**systemd**(1)](/systemd/1.md), [**sd-bus**(3)](/sd-bus/3.md), [**sd\_bus\_slot\_set\_destroy\_callback**(3)](/sd_bus_slot_set_destroy_callback/3.md), [**sd\_bus\_add\_match**(3)](/sd_bus_add_match/3.md), [**sd\_bus\_slot\_get\_current\_userdata**(3)](/sd_bus_slot_get_current_userdata/3.md)
