From d34689ff54650a581a2af3595a6f42c7d5c0166e Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Wed, 13 Nov 2024 16:20:06 -0800 Subject: [PATCH 31/31] build: allow await for FD with older libdex This just makes backports easier. --- meson.build | 2 +- src/libsysprof/sysprof-fd-private.h | 7 +++++ src/libsysprof/sysprof-fd.c | 24 ++++++++++++++++ src/libsysprof/sysprof-user-sampler.c | 28 ++----------------- .../tests/test-live-unwinder.c | 5 ++-- 5 files changed, 37 insertions(+), 29 deletions(-) diff --git a/meson.build b/meson.build index 16d64e8a..e2a9a995 100644 --- a/meson.build +++ b/meson.build @@ -45,7 +45,7 @@ need_libsysprof = (need_gtk or get_option('tools') or get_option('tests')) -dex_req = '0.9' +dex_req = '0.8' glib_req = '2.76.0' gtk_req = '4.15' polkit_req = '0.105' diff --git a/src/libsysprof/sysprof-fd-private.h b/src/libsysprof/sysprof-fd-private.h index 1d4dfabc..f6f11b0c 100644 --- a/src/libsysprof/sysprof-fd-private.h +++ b/src/libsysprof/sysprof-fd-private.h @@ -22,6 +22,8 @@ #include +#include + G_BEGIN_DECLS #define SYSPROF_TYPE_FD (sysprof_fd_get_type()) @@ -36,4 +38,9 @@ void sysprof_fd_free (SysprofFD *fd); G_DEFINE_AUTOPTR_CLEANUP_FUNC (SysprofFD, sysprof_fd_free) +int sysprof_await_fd (DexFuture *future, + GError **error); +void sysprof_promise_resolve_fd (DexPromise *promise, + int fd); + G_END_DECLS diff --git a/src/libsysprof/sysprof-fd.c b/src/libsysprof/sysprof-fd.c index 5e34f8d9..a571cefe 100644 --- a/src/libsysprof/sysprof-fd.c +++ b/src/libsysprof/sysprof-fd.c @@ -65,3 +65,27 @@ sysprof_fd_dup (const SysprofFD *fd) } G_DEFINE_BOXED_TYPE (SysprofFD, sysprof_fd, sysprof_fd_dup, sysprof_fd_free) + +void +sysprof_promise_resolve_fd (DexPromise *promise, + int fd) +{ + GValue gvalue = {SYSPROF_TYPE_FD, {{.v_pointer = &fd}, {.v_int = 0}}}; + dex_promise_resolve (promise, &gvalue); +} + +int +sysprof_await_fd (DexFuture *future, + GError **error) +{ + SysprofFD *fd = dex_await_boxed (future, error); + int ret = -1; + + if (fd != NULL) + { + ret = sysprof_fd_steal (fd); + sysprof_fd_free (fd); + } + + return ret; +} diff --git a/src/libsysprof/sysprof-user-sampler.c b/src/libsysprof/sysprof-user-sampler.c index 6079708e..05f97cbf 100644 --- a/src/libsysprof/sysprof-user-sampler.c +++ b/src/libsysprof/sysprof-user-sampler.c @@ -89,30 +89,6 @@ close_fd (gpointer data) } } -static void -promise_resolve_fd (DexPromise *promise, - int fd) -{ - GValue gvalue = {SYSPROF_TYPE_FD, {{.v_pointer = &fd}, {.v_int = 0}}}; - dex_promise_resolve (promise, &gvalue); -} - -static int -await_fd (DexFuture *future, - GError **error) -{ - SysprofFD *fd = dex_await_boxed (future, error); - int ret = -1; - - if (fd != NULL) - { - ret = sysprof_fd_steal (fd); - sysprof_fd_free (fd); - } - - return ret; -} - static void sysprof_user_sampler_ioctl (SysprofUserSampler *self, gboolean enable) @@ -177,7 +153,7 @@ _perf_event_open_cb (GObject *object, if (-1 == (fd = g_unix_fd_list_get (fd_list, handle, &error))) goto failure; - promise_resolve_fd (promise, g_steal_fd (&fd)); + sysprof_promise_resolve_fd (promise, g_steal_fd (&fd)); return; } @@ -262,7 +238,7 @@ try_again: _perf_event_open_cb, dex_ref (promise)); - if (-1 == (perf_fd = await_fd (dex_ref (promise), error))) + if (-1 == (perf_fd = sysprof_await_fd (dex_ref (promise), error))) { g_clear_pointer (&options, g_variant_unref); diff --git a/src/sysprof-live-unwinder/tests/test-live-unwinder.c b/src/sysprof-live-unwinder/tests/test-live-unwinder.c index 114cc568..c3eda85a 100644 --- a/src/sysprof-live-unwinder/tests/test-live-unwinder.c +++ b/src/sysprof-live-unwinder/tests/test-live-unwinder.c @@ -33,6 +33,7 @@ #include +#include "sysprof-fd-private.h" #include "sysprof-perf-event-stream-private.h" #if HAVE_POLKIT_AGENT @@ -89,7 +90,7 @@ open_perf_stream_cb (GObject *object, if (-1 != (fd = g_unix_fd_list_get (fd_list, handle, &error))) { - dex_promise_resolve_fd (promise, g_steal_fd (&fd)); + sysprof_promise_resolve_fd (promise, g_steal_fd (&fd)); return; } } @@ -179,7 +180,7 @@ try_again: open_perf_stream_cb, dex_ref (promise)); - fd = dex_await_fd (dex_ref (promise), error); + fd = sysprof_await_fd (dex_ref (promise), error); if (*error == NULL) { -- 2.45.2