feature: implement condition variable, mutex, and read-write lock alignment functions and generalzize new/free functions
This commit is contained in:
parent
75fbe33201
commit
eb60ab304a
6 changed files with 114 additions and 86 deletions
36
Source/DrangPlatform/Source/sync/cond_var.c
Normal file
36
Source/DrangPlatform/Source/sync/cond_var.c
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
#include "drang/alloc.h"
|
||||||
|
#include "drang/error.h"
|
||||||
|
#include <drang/sync.h>
|
||||||
|
|
||||||
|
|
||||||
|
int drang_cond_new(struct drang_cond **cond)
|
||||||
|
{
|
||||||
|
struct drang_cond *c = NULL;
|
||||||
|
DRANG_BEGIN_TRY();
|
||||||
|
|
||||||
|
DRANG_CHECK(cond != NULL, DRANG_EINVAL);
|
||||||
|
|
||||||
|
c = DRANG_TRY_ALLOC_ALIGNED(drang_cond_size(), drang_cond_alignment());
|
||||||
|
|
||||||
|
DRANG_TRY(drang_cond_init(c));
|
||||||
|
|
||||||
|
DRANG_RETURN_IN(cond, c);
|
||||||
|
|
||||||
|
DRANG_CATCH(_)
|
||||||
|
{
|
||||||
|
if (c != NULL) {
|
||||||
|
drang_free(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DRANG_END_TRY();
|
||||||
|
}
|
||||||
|
|
||||||
|
void drang_cond_free(struct drang_cond *cond)
|
||||||
|
{
|
||||||
|
if (cond == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
drang_cond_fini(cond);
|
||||||
|
drang_free(cond);
|
||||||
|
}
|
||||||
36
Source/DrangPlatform/Source/sync/mutex.c
Normal file
36
Source/DrangPlatform/Source/sync/mutex.c
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
#include "drang/alloc.h"
|
||||||
|
#include "drang/error.h"
|
||||||
|
#include <drang/sync.h>
|
||||||
|
|
||||||
|
|
||||||
|
int drang_mutex_new(struct drang_mutex **mutex)
|
||||||
|
{
|
||||||
|
struct drang_mutex* m = NULL;
|
||||||
|
DRANG_BEGIN_TRY();
|
||||||
|
|
||||||
|
DRANG_CHECK(mutex != NULL, DRANG_EINVAL);
|
||||||
|
|
||||||
|
m = DRANG_TRY_ALLOC_ALIGNED(drang_mutex_size(), drang_mutex_alignment());
|
||||||
|
|
||||||
|
DRANG_TRY(drang_mutex_init(m));
|
||||||
|
|
||||||
|
DRANG_RETURN_IN(mutex, m);
|
||||||
|
|
||||||
|
DRANG_CATCH(_)
|
||||||
|
{
|
||||||
|
if (m != NULL) {
|
||||||
|
drang_free(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DRANG_END_TRY()
|
||||||
|
}
|
||||||
|
|
||||||
|
void drang_mutex_free(struct drang_mutex *mutex)
|
||||||
|
{
|
||||||
|
if (mutex == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
drang_mutex_fini(mutex);
|
||||||
|
drang_free(mutex);
|
||||||
|
}
|
||||||
36
Source/DrangPlatform/Source/sync/rwlock.c
Normal file
36
Source/DrangPlatform/Source/sync/rwlock.c
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
#include <drang/sync.h>
|
||||||
|
#include <drang/error.h>
|
||||||
|
#include <drang/alloc.h>
|
||||||
|
|
||||||
|
|
||||||
|
int drang_rwlock_new(struct drang_rwlock **rwlock)
|
||||||
|
{
|
||||||
|
struct drang_rwlock *rw = NULL;
|
||||||
|
DRANG_BEGIN_TRY();
|
||||||
|
|
||||||
|
DRANG_CHECK(rwlock != NULL, DRANG_EINVAL);
|
||||||
|
|
||||||
|
rw = DRANG_TRY_ALLOC_ALIGNED(drang_rwlock_size(), drang_rwlock_alignment());
|
||||||
|
|
||||||
|
DRANG_TRY(drang_rwlock_init(rw));
|
||||||
|
|
||||||
|
DRANG_RETURN_IN(rwlock, rw);
|
||||||
|
|
||||||
|
DRANG_CATCH(_)
|
||||||
|
{
|
||||||
|
if (rw != NULL) {
|
||||||
|
drang_free(rw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DRANG_END_TRY();
|
||||||
|
}
|
||||||
|
|
||||||
|
void drang_rwlock_free(struct drang_rwlock *rwlock)
|
||||||
|
{
|
||||||
|
if (rwlock == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
drang_rwlock_fini(rwlock);
|
||||||
|
drang_free(rwlock);
|
||||||
|
}
|
||||||
|
|
@ -8,36 +8,9 @@ size_t drang_cond_size(void)
|
||||||
return sizeof(struct drang_cond);
|
return sizeof(struct drang_cond);
|
||||||
}
|
}
|
||||||
|
|
||||||
int drang_cond_new(struct drang_cond **cond)
|
size_t drang_cond_alignment(void)
|
||||||
{
|
{
|
||||||
struct drang_cond *c = NULL;
|
return alignof(struct drang_cond);
|
||||||
DRANG_BEGIN_TRY();
|
|
||||||
|
|
||||||
DRANG_CHECK(cond != NULL, DRANG_EINVAL);
|
|
||||||
|
|
||||||
c = DRANG_TRY_ALLOC_T(struct drang_cond);
|
|
||||||
|
|
||||||
DRANG_TRY(drang_cond_init(c));
|
|
||||||
|
|
||||||
DRANG_RETURN_IN(cond, c);
|
|
||||||
|
|
||||||
DRANG_CATCH(_)
|
|
||||||
{
|
|
||||||
if (c != NULL) {
|
|
||||||
drang_free(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DRANG_END_TRY();
|
|
||||||
}
|
|
||||||
|
|
||||||
void drang_cond_free(struct drang_cond *cond)
|
|
||||||
{
|
|
||||||
if (cond == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
drang_cond_fini(cond);
|
|
||||||
drang_free(cond);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int drang_cond_init(struct drang_cond *cond)
|
int drang_cond_init(struct drang_cond *cond)
|
||||||
|
|
|
||||||
|
|
@ -7,37 +7,11 @@ size_t drang_mutex_size(void)
|
||||||
return sizeof(struct drang_mutex);
|
return sizeof(struct drang_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
int drang_mutex_new(struct drang_mutex **mutex)
|
size_t drang_mutex_alignment(void)
|
||||||
{
|
{
|
||||||
struct drang_mutex *m = NULL;
|
return alignof(struct drang_mutex);
|
||||||
DRANG_BEGIN_TRY();
|
|
||||||
|
|
||||||
DRANG_CHECK(mutex != NULL, DRANG_EINVAL);
|
|
||||||
|
|
||||||
m = DRANG_TRY_ALLOC_T(struct drang_mutex);
|
|
||||||
|
|
||||||
DRANG_TRY(drang_mutex_init(m));
|
|
||||||
|
|
||||||
DRANG_RETURN_IN(mutex, m);
|
|
||||||
|
|
||||||
DRANG_CATCH(_)
|
|
||||||
{
|
|
||||||
if (m != NULL) {
|
|
||||||
drang_free(m);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DRANG_END_TRY();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void drang_mutex_free(struct drang_mutex *mutex)
|
|
||||||
{
|
|
||||||
if (mutex == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
drang_mutex_fini(mutex);
|
|
||||||
drang_free(mutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
int drang_mutex_init(struct drang_mutex *mutex)
|
int drang_mutex_init(struct drang_mutex *mutex)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,36 +7,9 @@ size_t drang_rwlock_size(void)
|
||||||
return sizeof(struct drang_rwlock);
|
return sizeof(struct drang_rwlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
int drang_rwlock_new(struct drang_rwlock **rwlock)
|
size_t drang_rwlock_alignment(void)
|
||||||
{
|
{
|
||||||
struct drang_rwlock *rw = NULL;
|
return alignof(struct drang_rwlock);
|
||||||
DRANG_BEGIN_TRY();
|
|
||||||
|
|
||||||
DRANG_CHECK(rwlock != NULL, DRANG_EINVAL);
|
|
||||||
|
|
||||||
rw = DRANG_TRY_ALLOC_T(struct drang_rwlock);
|
|
||||||
|
|
||||||
DRANG_TRY(drang_rwlock_init(rw));
|
|
||||||
|
|
||||||
DRANG_RETURN_IN(rwlock, rw);
|
|
||||||
|
|
||||||
DRANG_CATCH(_)
|
|
||||||
{
|
|
||||||
if (rw != NULL) {
|
|
||||||
drang_free(rw);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DRANG_END_TRY();
|
|
||||||
}
|
|
||||||
|
|
||||||
void drang_rwlock_free(struct drang_rwlock *rwlock)
|
|
||||||
{
|
|
||||||
if (rwlock == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
drang_rwlock_fini(rwlock);
|
|
||||||
drang_free(rwlock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int drang_rwlock_init(struct drang_rwlock *rwlock)
|
int drang_rwlock_init(struct drang_rwlock *rwlock)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue