diff --git a/src/libsysprof/sysprof-document-loader-private.h b/src/libsysprof/sysprof-document-loader-private.h index f7982489..d9f3d697 100644 --- a/src/libsysprof/sysprof-document-loader-private.h +++ b/src/libsysprof/sysprof-document-loader-private.h @@ -21,14 +21,17 @@ #pragma once +#include + #include "sysprof-document-loader.h" #include "sysprof-document-task.h" G_BEGIN_DECLS -void _sysprof_document_loader_add_task (SysprofDocumentLoader *self, - SysprofDocumentTask *task); -void _sysprof_document_loader_remove_task (SysprofDocumentLoader *self, - SysprofDocumentTask *task); +DexFuture *_sysprof_document_loader_load (SysprofDocumentLoader *loader); +void _sysprof_document_loader_add_task (SysprofDocumentLoader *self, + SysprofDocumentTask *task); +void _sysprof_document_loader_remove_task (SysprofDocumentLoader *self, + SysprofDocumentTask *task); G_END_DECLS diff --git a/src/libsysprof/sysprof-document-loader.c b/src/libsysprof/sysprof-document-loader.c index 00b525df..5429aa67 100644 --- a/src/libsysprof/sysprof-document-loader.c +++ b/src/libsysprof/sysprof-document-loader.c @@ -789,3 +789,38 @@ sysprof_document_loader_list_tasks (SysprofDocumentLoader *self) return g_object_ref (G_LIST_MODEL (self->tasks)); } + +static void +sysprof_document_loader_load_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) +{ + SysprofDocumentLoader *loader = (SysprofDocumentLoader *)object; + g_autoptr(DexPromise) promise = user_data; + g_autoptr(SysprofDocument) document = NULL; + g_autoptr(GError) error = NULL; + + g_assert (SYSPROF_IS_DOCUMENT_LOADER (loader)); + g_assert (G_IS_ASYNC_RESULT (result)); + g_assert (DEX_IS_PROMISE (promise)); + + if ((document = sysprof_document_loader_load_finish (loader, result, &error))) + dex_promise_resolve_object (promise, g_steal_pointer (&document)); + else + dex_promise_reject (promise, g_steal_pointer (&error)); +} + +DexFuture * +_sysprof_document_loader_load (SysprofDocumentLoader *loader) +{ + DexPromise *promise; + + g_return_val_if_fail (SYSPROF_IS_DOCUMENT_LOADER (loader), NULL); + + promise = dex_promise_new (); + sysprof_document_loader_load_async (loader, + NULL, + sysprof_document_loader_load_cb, + dex_ref (promise)); + return DEX_FUTURE (promise); +} diff --git a/src/libsysprof/sysprof-symbols-bundle.c b/src/libsysprof/sysprof-symbols-bundle.c index ecb93603..0d51d9d5 100644 --- a/src/libsysprof/sysprof-symbols-bundle.c +++ b/src/libsysprof/sysprof-symbols-bundle.c @@ -27,16 +27,14 @@ #include +#include "sysprof-document-loader-private.h" + #include "sysprof-instrument-private.h" #include "sysprof-recording-private.h" #include "sysprof-symbols-bundle.h" G_DEFINE_AUTOPTR_CLEANUP_FUNC (SysprofCaptureReader, sysprof_capture_reader_unref) -static const DexAsyncPairInfo load_info = - DEX_ASYNC_PAIR_INFO_OBJECT (sysprof_document_loader_load_async, - sysprof_document_loader_load_finish); - struct _SysprofSymbolsBundle { SysprofInstrument parent_instance; @@ -81,7 +79,7 @@ sysprof_symbols_bundle_augment_fiber (gpointer user_data) elf = sysprof_elf_symbolizer_new (); sysprof_document_loader_set_symbolizer (loader, elf); - if (!(document = dex_await_object (dex_async_pair_new (loader, &load_info), &error))) + if (!(document = dex_await_object (_sysprof_document_loader_load (loader), &error))) return dex_future_new_for_error (g_steal_pointer (&error)); g_assert (SYSPROF_IS_DOCUMENT (document));