[Yunq] Delete client capability in destructor.

Add a method to the server class to create an unowned capability. This
makes it simpler to create a capability for passing to other processes.

Duplicate the init yellowstone cap when using it temporarily.
This commit is contained in:
Drew Galbraith 2023-11-27 08:28:58 -08:00
parent 96a2f74e14
commit ad7794c694
24 changed files with 98 additions and 9 deletions

View file

@ -3,10 +3,18 @@
#include <glacier/buffer/byte_buffer.h>
#include <glacier/buffer/cap_buffer.h>
#include <mammoth/util/debug.h>
#include <zcall.h>
VoyageursClient::~VoyageursClient() {
if (endpoint_ != 0) {
check(ZCapRelease(endpoint_));
}
}
glcr::ErrorCode VoyageursClient::RegisterKeyboardListener(const KeyboardListener& request) {

View file

@ -13,6 +13,7 @@ class VoyageursClient {
VoyageursClient(z_cap_t Voyageurs_cap) : endpoint_(Voyageurs_cap) {}
VoyageursClient(const VoyageursClient&) = delete;
VoyageursClient(VoyageursClient&& other) : endpoint_(other.endpoint_) {other.endpoint_ = 0;};
~VoyageursClient();
z_cap_t Capability() { return endpoint_; }

View file

@ -35,6 +35,12 @@ VoyageursServerBase::~VoyageursServerBase() {
}
}
glcr::ErrorOr<z_cap_t> VoyageursServerBase::CreateClientCap() {
uint64_t client_cap;
RET_ERR(ZCapDuplicate(endpoint_, ~(kZionPerm_Read), &client_cap));
return client_cap;
}
glcr::ErrorOr<VoyageursClient> VoyageursServerBase::CreateClient() {
uint64_t client_cap;
RET_ERR(ZCapDuplicate(endpoint_, ~(kZionPerm_Read), &client_cap));

View file

@ -17,6 +17,7 @@ class VoyageursServerBase {
VoyageursServerBase(VoyageursServerBase&&) = delete;
virtual ~VoyageursServerBase();
glcr::ErrorOr<z_cap_t> CreateClientCap();
glcr::ErrorOr<VoyageursClient> CreateClient();
[[nodiscard]] Thread RunServer();