---
name: "sd_event_source_get_userdata"
section: "3"
platform: "linux"
package: "libsystemd-dev"
version: "257.13-1~deb13u1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/sd_event_source_set_userdata"
---

# sd\_event\_source\_get\_userdata(3)

Set or retrieve user data pointer of event sources

Part of [sd\_event\_source\_set\_userdata(3)](/sd_event_source_set_userdata/3.md).

## NAME

sd\_event\_source\_set\_userdata, sd\_event\_source\_get\_userdata - Set or retrieve user data pointer of event sources

## SYNOPSIS

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

**void\* sd\_event\_source\_set\_userdata(sd\_event\_source \****source***, void \****userdata***);**

**void\* sd\_event\_source\_get\_userdata(sd\_event\_source \****source***);**

## DESCRIPTION

**sd\_event\_source\_set\_userdata()** may be used to set an arbitrary user data pointer for the event source object specified as *source*. The user data pointer is usually specified when creating an event source object with calls such as [**sd\_event\_add\_io**(3)](/sd_event_add_io/3.md) or [**sd\_event\_add\_time**(3)](/sd_event_add_time/3.md), and may be updated with this call. The user data pointer is also passed to all handler callback functions associated with the event source. The *userdata* parameter specifies the new user data pointer to set, the function returns the previous user data pointer. Note that **NULL** is a valid user data pointer.

**sd\_event\_source\_get\_userdata()** may be used to query the current user data pointer assigned to the event source object *source*.

## RETURN VALUE

On success, **sd\_event\_source\_set\_userdata()** and **sd\_event\_source\_get\_userdata()** return the previously set user data pointer. On failure, they return **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.

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\_event\_source\_set\_userdata()** and **sd\_event\_source\_get\_userdata()** were added in version 229.

## SEE ALSO

[**sd-event**(3)](/sd-event/3.md), [**sd\_event\_add\_io**(3)](/sd_event_add_io/3.md), [**sd\_event\_add\_time**(3)](/sd_event_add_time/3.md), [**sd\_event\_add\_signal**(3)](/sd_event_add_signal/3.md), [**sd\_event\_add\_child**(3)](/sd_event_add_child/3.md), [**sd\_event\_add\_inotify**(3)](/sd_event_add_inotify/3.md), [**sd\_event\_add\_defer**(3)](/sd_event_add_defer/3.md), [**sd\_event\_source\_set\_description**(3)](/sd_event_source_set_description/3.md)
