[Mammoth] Create userspace mutex capability.
This commit is contained in:
parent
4c04f9d561
commit
6cb0041253
|
@ -5,6 +5,7 @@ add_library(mammoth STATIC
|
||||||
src/endpoint_server.cpp
|
src/endpoint_server.cpp
|
||||||
src/init.cpp
|
src/init.cpp
|
||||||
src/memory_region.cpp
|
src/memory_region.cpp
|
||||||
|
src/mutex.cpp
|
||||||
src/new.cpp
|
src/new.cpp
|
||||||
src/process.cpp
|
src/process.cpp
|
||||||
src/port_client.cpp
|
src/port_client.cpp
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <glacier/status/error_or.h>
|
||||||
|
#include <ztypes.h>
|
||||||
|
|
||||||
|
class Mutex {
|
||||||
|
public:
|
||||||
|
Mutex(const Mutex&) = delete;
|
||||||
|
Mutex(Mutex&&);
|
||||||
|
Mutex& operator=(Mutex&&);
|
||||||
|
|
||||||
|
static glcr::ErrorOr<Mutex> Create();
|
||||||
|
|
||||||
|
glcr::ErrorCode Lock();
|
||||||
|
glcr::ErrorCode Release();
|
||||||
|
|
||||||
|
private:
|
||||||
|
z_cap_t mutex_cap_;
|
||||||
|
|
||||||
|
Mutex(z_cap_t mutex_cap) : mutex_cap_(mutex_cap) {}
|
||||||
|
};
|
|
@ -0,0 +1,23 @@
|
||||||
|
#include "mammoth/mutex.h"
|
||||||
|
|
||||||
|
#include <zcall.h>
|
||||||
|
|
||||||
|
Mutex::Mutex(Mutex&& other) : mutex_cap_(other.mutex_cap_) {
|
||||||
|
other.mutex_cap_ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Mutex& Mutex::operator=(Mutex&& other) {
|
||||||
|
// TODO: Release existing mutex if it exists.
|
||||||
|
mutex_cap_ = other.mutex_cap_;
|
||||||
|
other.mutex_cap_ = 0;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
glcr::ErrorOr<Mutex> Mutex::Create() {
|
||||||
|
z_cap_t mutex_cap;
|
||||||
|
RET_ERR(ZMutexCreate(&mutex_cap));
|
||||||
|
return Mutex(mutex_cap);
|
||||||
|
}
|
||||||
|
|
||||||
|
glcr::ErrorCode Mutex::Lock() { return ZMutexLock(mutex_cap_); }
|
||||||
|
glcr::ErrorCode Mutex::Release() { return ZMutexRelease(mutex_cap_); }
|
Loading…
Reference in New Issue