fixed thread overspinning problem
							parent
							
								
									fccb93ccf9
								
							
						
					
					
						commit
						5f7de6acaa
					
				|  | @ -80,6 +80,7 @@ PLAT_THREAD_SIG(coroutine_main){ | ||||||
|         Assert(me->yield_ctx != 0); |         Assert(me->yield_ctx != 0); | ||||||
|         Assert(me->function != 0); |         Assert(me->function != 0); | ||||||
|          |          | ||||||
|  |         DBG_POINT(); | ||||||
|         me->function(&me->head); |         me->function(&me->head); | ||||||
|          |          | ||||||
|         // NOTE(allen): Wake up the caller and set this coroutine back to being dead.
 |         // NOTE(allen): Wake up the caller and set this coroutine back to being dead.
 | ||||||
|  |  | ||||||
|  | @ -76,6 +76,7 @@ | ||||||
| 
 | 
 | ||||||
| #include "4ed_shared_thread_constants.h" | #include "4ed_shared_thread_constants.h" | ||||||
| #include "unix_threading_wrapper.h" | #include "unix_threading_wrapper.h" | ||||||
|  | #include "linux_semaphore_wrapper.h" | ||||||
| 
 | 
 | ||||||
| //
 | //
 | ||||||
| // Linux macros
 | // Linux macros
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,34 @@ | ||||||
|  | /*
 | ||||||
|  |  * Mr. 4th Dimention - Allen Webster | ||||||
|  |  * | ||||||
|  |  * 07.11.2017 | ||||||
|  |  * | ||||||
|  |  * Linux semaphore wrapper | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | // TOP
 | ||||||
|  | 
 | ||||||
|  | union Semaphore{ | ||||||
|  |     sem_t s; | ||||||
|  |     FixSize(SEMAPHORE_TYPE_SIZE); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | internal void | ||||||
|  | system_init_semaphore(Semaphore *s, u32 count){ | ||||||
|  |     sem_init(&s->s, 0, 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | internal void | ||||||
|  | system_wait_on_semaphore(Semaphore *s){ | ||||||
|  |     sem_wait(&s->s); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | internal void | ||||||
|  | system_release_semaphore(Semaphore *s){ | ||||||
|  |     sem_post(&s->s); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // BOTTOM
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @ -31,6 +31,8 @@ | ||||||
| # include "4coder_default_bindings.cpp" | # include "4coder_default_bindings.cpp" | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | #include "osx_objective_c_to_cpp_links.h" | ||||||
|  | 
 | ||||||
| #include "4ed_math.h" | #include "4ed_math.h" | ||||||
| 
 | 
 | ||||||
| #include "4ed_system.h" | #include "4ed_system.h" | ||||||
|  | @ -48,6 +50,11 @@ | ||||||
| #include <OpenGL/OpenGL.h> | #include <OpenGL/OpenGL.h> | ||||||
| #include <OpenGL/gl.h> | #include <OpenGL/gl.h> | ||||||
| 
 | 
 | ||||||
|  | #undef external | ||||||
|  | #undef internal | ||||||
|  | #include <mach/mach.h> | ||||||
|  | #define external extern "C" | ||||||
|  | #define internal static | ||||||
| #include <mach-o/dyld.h> | #include <mach-o/dyld.h> | ||||||
| 
 | 
 | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
|  | @ -56,6 +63,7 @@ | ||||||
| 
 | 
 | ||||||
| #include "4ed_shared_thread_constants.h" | #include "4ed_shared_thread_constants.h" | ||||||
| #include "unix_threading_wrapper.h" | #include "unix_threading_wrapper.h" | ||||||
|  | #include "mac_semaphore_wrapper.h" | ||||||
| 
 | 
 | ||||||
| // TODO(allen): Make an intrinsics header that uses the cracked OS to define a single set of intrinsic names.
 | // TODO(allen): Make an intrinsics header that uses the cracked OS to define a single set of intrinsic names.
 | ||||||
| #define InterlockedCompareExchange(dest, ex, comp) \ | #define InterlockedCompareExchange(dest, ex, comp) \ | ||||||
|  | @ -86,7 +94,6 @@ struct OSX_Vars{ | ||||||
| 
 | 
 | ||||||
| ////////////////////////////////
 | ////////////////////////////////
 | ||||||
| 
 | 
 | ||||||
| #include "osx_objective_c_to_cpp_links.h" |  | ||||||
| OSX_Objective_C_Vars osx_objc; | OSX_Objective_C_Vars osx_objc; | ||||||
| OSX_Vars osxvars; | OSX_Vars osxvars; | ||||||
| global Render_Target target; | global Render_Target target; | ||||||
|  |  | ||||||
|  | @ -582,13 +582,13 @@ osx_get_file_change_event(char *buffer, i32 max, i32 *size){ | ||||||
|     struct kevent event_out; |     struct kevent event_out; | ||||||
|     i32 count = kevent(file_change_queue.kq, 0, 0, &event_out, 1, &t); |     i32 count = kevent(file_change_queue.kq, 0, 0, &event_out, 1, &t); | ||||||
|     if (count < 0 || (count > 0 && event_out.flags == EV_ERROR)){ |     if (count < 0 || (count > 0 && event_out.flags == EV_ERROR)){ | ||||||
|         fprintf(stdout, "count: %4d error: %s\n", count, strerror(errno)); |         //fprintf(stdout, "count: %4d error: %s\n", count, strerror(errno)); | ||||||
|     } |     } | ||||||
|     else if (count > 0){ |     else if (count > 0){ | ||||||
|         if (event_out.udata != 0){ |         if (event_out.udata != 0){ | ||||||
|             i32 len = *(i32*)event_out.udata; |             i32 len = *(i32*)event_out.udata; | ||||||
|             char *str = (char*)((i32*)event_out.udata + 1); |             char *str = (char*)((i32*)event_out.udata + 1); | ||||||
|             fprintf(stdout, "got an event for file: %.*s\n", len, str); |             //fprintf(stdout, "got an event for file: %.*s\n", len, str); | ||||||
|             if (len <= max){ |             if (len <= max){ | ||||||
|                 *size = len; |                 *size = len; | ||||||
|                 memcpy(buffer, str, len); |                 memcpy(buffer, str, len); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,35 @@ | ||||||
|  | /*
 | ||||||
|  |  * Mr. 4th Dimention - Allen Webster | ||||||
|  |  * | ||||||
|  |  * 07.11.2017 | ||||||
|  |  * | ||||||
|  |  * Mac semaphore wrapper | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | // TOP
 | ||||||
|  | 
 | ||||||
|  | union Semaphore{ | ||||||
|  |     semaphore_t s; | ||||||
|  |     FixSize(SEMAPHORE_TYPE_SIZE); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | internal void | ||||||
|  | system_init_semaphore(Semaphore *s, u32 count){ | ||||||
|  |     task_t task = mach_task_self(); | ||||||
|  |     semaphore_create(task, &s->s, SYNC_POLICY_FIFO, 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | internal void | ||||||
|  | system_wait_on_semaphore(Semaphore *s){ | ||||||
|  |     semaphore_wait(s->s); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | internal void | ||||||
|  | system_release_semaphore(Semaphore *s){ | ||||||
|  |     semaphore_signal(s->s); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // BOTTOM
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @ -14,7 +14,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| 
 | 
 | ||||||
| #if 1 | #if 0 | ||||||
| #define DBG_POINT() fprintf(stdout, "%s\n", __FILE__ ":" LINE_STR ":") | #define DBG_POINT() fprintf(stdout, "%s\n", __FILE__ ":" LINE_STR ":") | ||||||
| #else | #else | ||||||
| #define DBG_POINT() | #define DBG_POINT() | ||||||
|  |  | ||||||
|  | @ -30,11 +30,6 @@ union Condition_Variable{ | ||||||
|     FixSize(CONDITION_VARIABLE_TYPE_SIZE); |     FixSize(CONDITION_VARIABLE_TYPE_SIZE); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| union Semaphore{ |  | ||||||
|     sem_t s; |  | ||||||
|     FixSize(SEMAPHORE_TYPE_SIZE); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| internal void | internal void | ||||||
| system_init_and_launch_thread(Thread *t, Thread_Function *proc, void *ptr){ | system_init_and_launch_thread(Thread *t, Thread_Function *proc, void *ptr){ | ||||||
|     pthread_create(&t->t, 0, proc, ptr); |     pthread_create(&t->t, 0, proc, ptr); | ||||||
|  | @ -70,21 +65,6 @@ system_signal_cv(Condition_Variable *cv, Mutex *m){ | ||||||
|     pthread_cond_signal(&cv->cv); |     pthread_cond_signal(&cv->cv); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| internal void |  | ||||||
| system_init_semaphore(Semaphore *s, u32 count){ |  | ||||||
|     sem_init(&s->s, 0, 0); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| internal void |  | ||||||
| system_wait_on_semaphore(Semaphore *s){ |  | ||||||
|     sem_wait(&s->s); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| internal void |  | ||||||
| system_release_semaphore(Semaphore *s){ |  | ||||||
|     sem_post(&s->s); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| // BOTTOM
 | // BOTTOM
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Allen Webster
						Allen Webster