Переглянути джерело

fixes for semaphore/conditions

Nicolas Cannasse 3 роки тому
батько
коміт
4964d603ed
1 змінених файлів з 8 додано та 1 видалено
  1. 8 1
      src/std/thread.c

+ 8 - 1
src/std/thread.c

@@ -22,6 +22,9 @@
 
 #include <hl.h>
 
+typedef struct _hl_semaphore hl_semaphore;
+typedef struct _hl_condition hl_condition;
+
 #if !defined(HL_THREADS)
 
 struct _hl_mutex {
@@ -191,7 +194,7 @@ DEFINE_PRIM(_VOID, mutex_free, _MUTEX);
 HL_PRIM hl_semaphore *hl_semaphore_alloc(int value) {
 #	if !defined(HL_THREADS)
 	static struct _hl_semaphore null_semaphore = {0};
-	return (hl_condition *)&null_semaphore;
+	return (hl_semaphore *)&null_semaphore;
 #	elif defined(HL_WIN)
 	hl_semaphore *sem =
 	    (hl_semaphore *)hl_gc_alloc_finalizer(sizeof(hl_semaphore));
@@ -226,6 +229,7 @@ HL_PRIM void hl_semaphore_acquire(hl_semaphore *sem) {
 
 HL_PRIM bool hl_semaphore_try_acquire(hl_semaphore *sem, vdynamic *timeout) {
 #	if !defined(HL_THREADS)
+	return true;
 #	elif defined(HL_WIN)
 	return WaitForSingleObject(sem->sem,
 	                           timeout ? (DWORD)((FLOAT)timeout->v.d * 1000.0)
@@ -335,6 +339,7 @@ HL_PRIM void hl_condition_acquire(hl_condition *cond) {
 
 HL_PRIM bool hl_condition_try_acquire(hl_condition *cond) {
 #	if !defined(HL_THREADS)
+	return true;
 #	elif defined(HL_WIN)
 	return (bool)TryEnterCriticalSection(&cond->cs);
 #	else
@@ -361,9 +366,11 @@ HL_PRIM void hl_condition_wait(hl_condition *cond) {
 
 HL_PRIM bool hl_condition_timed_wait(hl_condition *cond, double timeout) {
 #	if !defined(HL_THREADS)
+	return true;
 #	elif defined(HL_WIN)
 	SleepConditionVariableCS(&cond->cond, &cond->cs,
 	                         (DWORD)((FLOAT)timeout * 1000.0));
+	return true;
 #	else
 	struct timeval tv;
 	struct timespec t;