mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-30 09:54:45 +00:00
Minor changes
This commit is contained in:
31
src/gb/gb.h
31
src/gb/gb.h
@@ -918,7 +918,10 @@ GB_DEF void gb_lfence (void);
|
||||
|
||||
|
||||
#if defined(GB_SYSTEM_WINDOWS)
|
||||
typedef struct gbSemaphore { void *win32_handle; } gbSemaphore;
|
||||
typedef struct gbSemaphore {
|
||||
void *win32_handle;
|
||||
LONG count;
|
||||
} gbSemaphore;
|
||||
#elif defined(GB_SYSTEM_OSX)
|
||||
typedef struct gbSemaphore { semaphore_t osx_handle; } gbSemaphore;
|
||||
#elif defined(GB_SYSTEM_UNIX)
|
||||
@@ -930,7 +933,7 @@ typedef struct gbSemaphore { sem_t unix_handle; } gbSemaphore;
|
||||
GB_DEF void gb_semaphore_init (gbSemaphore *s);
|
||||
GB_DEF void gb_semaphore_destroy(gbSemaphore *s);
|
||||
GB_DEF void gb_semaphore_post (gbSemaphore *s, i32 count);
|
||||
GB_DEF void gb_semaphore_release(gbSemaphore *s); // NOTE(bill): gb_semaphore_post(s, 1)
|
||||
GB_DEF void gb_semaphore_release(gbSemaphore *s);
|
||||
GB_DEF void gb_semaphore_wait (gbSemaphore *s);
|
||||
|
||||
|
||||
@@ -4588,10 +4591,24 @@ gb_inline void gb_lfence(void) {
|
||||
gb_inline void gb_semaphore_release(gbSemaphore *s) { gb_semaphore_post(s, 1); }
|
||||
|
||||
#if defined(GB_SYSTEM_WINDOWS)
|
||||
gb_inline void gb_semaphore_init (gbSemaphore *s) { s->win32_handle = CreateSemaphoreA(NULL, 0, I32_MAX, NULL); }
|
||||
gb_inline void gb_semaphore_destroy(gbSemaphore *s) { CloseHandle(s->win32_handle); }
|
||||
gb_inline void gb_semaphore_post (gbSemaphore *s, i32 count) { ReleaseSemaphore(s->win32_handle, count, NULL); }
|
||||
gb_inline void gb_semaphore_wait (gbSemaphore *s) { WaitForSingleObjectEx(s->win32_handle, INFINITE, FALSE); }
|
||||
gb_inline void gb_semaphore_init(gbSemaphore *s) {
|
||||
s->win32_handle = CreateSemaphoreA(NULL, 0, I32_MAX, NULL);
|
||||
s->count = 0;
|
||||
}
|
||||
gb_inline void gb_semaphore_destroy(gbSemaphore *s) {
|
||||
CloseHandle(s->win32_handle);
|
||||
}
|
||||
gb_inline void gb_semaphore_post(gbSemaphore *s, i32 count) {
|
||||
_InterlockedIncrement(&s->count);
|
||||
if (ReleaseSemaphore(s->win32_handle, count, NULL) == FALSE) {
|
||||
_InterlockedDecrement(&s->count);
|
||||
}
|
||||
}
|
||||
gb_inline void gb_semaphore_wait(gbSemaphore *s) {
|
||||
if (WaitForSingleObjectEx(s->win32_handle, INFINITE, FALSE) == WAIT_OBJECT_0) {
|
||||
_InterlockedDecrement(&s->count);
|
||||
}
|
||||
}
|
||||
|
||||
#elif defined(GB_SYSTEM_OSX)
|
||||
gb_inline void gb_semaphore_init (gbSemaphore *s) { semaphore_create(mach_task_self(), &s->osx_handle, SYNC_POLICY_FIFO, 0); }
|
||||
@@ -8975,7 +8992,7 @@ gb_inline void gb_exit(u32 code) { exit(code); }
|
||||
|
||||
gb_inline void gb_yield(void) {
|
||||
#if defined(GB_SYSTEM_WINDOWS)
|
||||
Sleep(0);
|
||||
YieldProcessor();
|
||||
#else
|
||||
sched_yield();
|
||||
#endif
|
||||
|
||||
@@ -4164,7 +4164,6 @@ bool init_parser(Parser *p) {
|
||||
map_init(&p->package_map, heap_allocator());
|
||||
array_init(&p->packages, heap_allocator());
|
||||
array_init(&p->package_imports, heap_allocator());
|
||||
array_init(&p->files_to_process, heap_allocator());
|
||||
gb_mutex_init(&p->file_add_mutex);
|
||||
gb_mutex_init(&p->file_decl_mutex);
|
||||
return true;
|
||||
@@ -4187,7 +4186,6 @@ void destroy_parser(Parser *p) {
|
||||
#endif
|
||||
array_free(&p->packages);
|
||||
array_free(&p->package_imports);
|
||||
array_free(&p->files_to_process);
|
||||
string_set_destroy(&p->imported_files);
|
||||
map_destroy(&p->package_map);
|
||||
gb_mutex_destroy(&p->file_add_mutex);
|
||||
@@ -4225,11 +4223,10 @@ WORKER_TASK_PROC(parser_worker_proc) {
|
||||
|
||||
void parser_add_file_to_process(Parser *p, AstPackage *pkg, FileInfo fi, TokenPos pos) {
|
||||
// TODO(bill): Use a better allocator
|
||||
ImportedFile f = {pkg, fi, pos, p->files_to_process.count};
|
||||
ImportedFile f = {pkg, fi, pos, p->file_to_process_count++};
|
||||
auto wd = gb_alloc_item(heap_allocator(), ParserWorkerData);
|
||||
wd->parser = p;
|
||||
wd->imported_file = f;
|
||||
array_add(&p->files_to_process, f);
|
||||
thread_pool_add_task(&parser_thread_pool, parser_worker_proc, wd);
|
||||
}
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ struct Parser {
|
||||
Map<AstPackage *> package_map; // Key: String (package name)
|
||||
Array<AstPackage *> packages;
|
||||
Array<ImportedPackage> package_imports;
|
||||
Array<ImportedFile> files_to_process;
|
||||
isize file_to_process_count;
|
||||
isize total_token_count;
|
||||
isize total_line_count;
|
||||
gbMutex file_add_mutex;
|
||||
|
||||
Reference in New Issue
Block a user