From 4f308829ad0e81a59971e172284c018cf2bdca3d Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 22 Mar 2019 20:48:40 +0100 Subject: Add mutex for lhs expr, add error for missing lhs expr for func, struct TODO: Use mutex in lhs expr and set resolved_type --- include/std/scoped_allocator.h | 4 ++++ include/std/thread.h | 13 ++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'include/std') diff --git a/include/std/scoped_allocator.h b/include/std/scoped_allocator.h index 9090767..d7ec1e1 100644 --- a/include/std/scoped_allocator.h +++ b/include/std/scoped_allocator.h @@ -15,7 +15,10 @@ struct ScopedAllocatorNode { struct ScopedAllocator { ScopedAllocatorNode head; ScopedAllocatorNode *current; + /* TODO: Use linked-list instead, since the elements are dynamically allocated anyways */ + /* Find another way to store mutexes */ Buffer/**/ buffers; + Buffer/**/ mutexes; }; CHECK_RESULT int scoped_allocator_node_init(ScopedAllocatorNode *self); @@ -25,5 +28,6 @@ CHECK_RESULT int scoped_allocator_init(ScopedAllocator *self); void scoped_allocator_deinit(ScopedAllocator *self); CHECK_RESULT int scoped_allocator_alloc(ScopedAllocator *self, usize size, void **mem); CHECK_RESULT int scoped_allocator_add_buffer(ScopedAllocator *self, Buffer *buffer); +CHECK_RESULT int scoped_allocator_create_mutex(ScopedAllocator *self, amal_mutex **mutex); #endif diff --git a/include/std/thread.h b/include/std/thread.h index 6eedb08..356ebf0 100644 --- a/include/std/thread.h +++ b/include/std/thread.h @@ -13,6 +13,8 @@ typedef void* (AmalThreadCallbackFunc)(void *userdata); #define AMAL_THREAD_ERR -1 #define AMAL_THREAD_NOT_JOINABLE -23 +/*#define AMAL_MUTEX_DEBUG*/ + struct amal_thread { pthread_t thread_id; pthread_attr_t thread_attr; @@ -28,7 +30,9 @@ typedef enum { struct amal_mutex { pthread_mutex_t mutex; + #ifdef AMAL_MUTEX_DEBUG const char *lock_identifier; + #endif bool locked; pthread_t owner_thread; }; @@ -39,6 +43,10 @@ CHECK_RESULT int amal_thread_deinit(amal_thread *self); CHECK_RESULT int amal_thread_detach(amal_thread *self); CHECK_RESULT int amal_thread_join(amal_thread *self, void **result); +bool amal_thread_is_main(); +/* Returns 0 if the number of usable threads is unknown */ +int amal_get_usable_thread_count(); + void amal_mutex_init(amal_mutex *self); void amal_mutex_deinit(amal_mutex *self); CHECK_RESULT int amal_mutex_lock(amal_mutex *self, const char *lock_identifier); @@ -46,9 +54,4 @@ CHECK_RESULT int amal_mutex_lock(amal_mutex *self, const char *lock_identifier); CHECK_RESULT int amal_mutex_unlock(amal_mutex *self); void amal_mutex_tryunlock(amal_mutex *self); -bool amal_thread_is_main(); - -/* Returns 0 if the number of usable threads is unknown */ -int amal_get_usable_thread_count(); - #endif -- cgit v1.2.3