blob: 7e22bfb13c9ae5008a88e581acf8e9a787dc56dd [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "garnet/bin/appmgr/dynamic_library_loader.h"
#include <lib/async-loop/loop.h>
#include <loader-service/loader-service.h>
namespace component {
namespace DynamicLibraryLoader {
static async_loop_t* ld_loop = nullptr;
zx_status_t Start(fxl::UniqueFD fd, zx::channel* result) {
zx_status_t status = ZX_OK;
if (!ld_loop) {
status = async_loop_create(&kAsyncLoopConfigNoAttachToThread, &ld_loop);
if (status != ZX_OK)
return status;
status = async_loop_start_thread(ld_loop, "appmgr-loader", nullptr);
if (status != ZX_OK)
return status;
}
loader_service_t* svc = nullptr;
status = loader_service_create_fd(async_loop_get_dispatcher(ld_loop),
fd.release(), &svc);
if (status != ZX_OK)
return status;
status = loader_service_connect(svc, result->reset_and_get_address());
loader_service_release(svc);
return status;
}
} // namespace DynamicLibraryLoader
} // namespace component