Skip to content

Commit e929d58

Browse files
committed
Add memory-allocator-independent util_mutex_ API
Add memory-allocator-independent util_mutex_ API: - util_mutex_get_size() - util_mutex_init() - util_mutex_destroy_not_free() Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 3489cfa commit e929d58

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

src/utils/utils_concurrency.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ struct os_mutex_t;
2727

2828
typedef struct os_mutex_t os_mutex_t;
2929

30+
size_t util_mutex_get_size(void);
31+
os_mutex_t *util_mutex_init(void *ptr);
3032
os_mutex_t *util_mutex_create(void);
33+
void util_mutex_destroy_not_free(os_mutex_t *m);
3134
void util_mutex_destroy(os_mutex_t *mutex);
3235
int util_mutex_lock(os_mutex_t *mutex);
3336
int util_mutex_unlock(os_mutex_t *mutex);

src/utils/utils_posix_concurrency.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,26 @@
1212

1313
#include "utils_concurrency.h"
1414

15-
os_mutex_t *util_mutex_create(void) {
16-
pthread_mutex_t *mutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
15+
size_t util_mutex_get_size(void) { return sizeof(pthread_mutex_t); }
16+
17+
os_mutex_t *util_mutex_init(void *ptr) {
18+
pthread_mutex_t *mutex = (pthread_mutex_t *)ptr;
1719
int ret = pthread_mutex_init(mutex, NULL);
1820
return ret == 0 ? ((os_mutex_t *)mutex) : NULL;
1921
}
2022

21-
void util_mutex_destroy(os_mutex_t *m) {
23+
os_mutex_t *util_mutex_create(void) {
24+
return util_mutex_init(malloc(util_mutex_get_size()));
25+
}
26+
27+
void util_mutex_destroy_not_free(os_mutex_t *m) {
2228
pthread_mutex_t *mutex = (pthread_mutex_t *)m;
2329
int ret = pthread_mutex_destroy(mutex);
2430
(void)ret; // TODO: add logging
31+
}
32+
33+
void util_mutex_destroy(os_mutex_t *m) {
34+
util_mutex_destroy_not_free(m);
2535
free(m);
2636
}
2737

src/utils/utils_windows_concurrency.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,27 @@ typedef struct {
1313
CRITICAL_SECTION lock;
1414
} internal_os_mutex_t;
1515

16-
os_mutex_t *util_mutex_create(void) {
17-
internal_os_mutex_t *mutex_internal =
18-
(internal_os_mutex_t *)calloc(1, sizeof(internal_os_mutex_t));
16+
size_t util_mutex_get_size(void) { return sizeof(internal_os_mutex_t); }
17+
18+
os_mutex_t *util_mutex_init(void *ptr) {
19+
internal_os_mutex_t *mutex_internal = (internal_os_mutex_t *)ptr;
1920
InitializeCriticalSection(&mutex_internal->lock);
2021
return (os_mutex_t *)mutex_internal;
2122
}
2223

23-
void util_mutex_destroy(os_mutex_t *mutex) {
24+
os_mutex_t *util_mutex_create(void) {
25+
return util_mutex_init(calloc(1, util_mutex_get_size()));
26+
}
27+
28+
void util_mutex_destroy_not_free(os_mutex_t *mutex) {
2429
internal_os_mutex_t *mutex_internal = (internal_os_mutex_t *)mutex;
2530
DeleteCriticalSection(&mutex_internal->lock);
2631
}
2732

33+
void util_mutex_destroy(os_mutex_t *mutex) {
34+
util_mutex_destroy_not_free(mutex);
35+
}
36+
2837
int util_mutex_lock(os_mutex_t *mutex) {
2938
internal_os_mutex_t *mutex_internal = (internal_os_mutex_t *)mutex;
3039
EnterCriticalSection(&mutex_internal->lock);

0 commit comments

Comments
 (0)