diff options
Diffstat (limited to 'c/src/exec/score/src')
-rw-r--r-- | c/src/exec/score/src/threadhandler.c | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/c/src/exec/score/src/threadhandler.c b/c/src/exec/score/src/threadhandler.c index bd4e4d319f..6b1d2dc5e2 100644 --- a/c/src/exec/score/src/threadhandler.c +++ b/c/src/exec/score/src/threadhandler.c @@ -86,29 +86,40 @@ void _Thread_Handler( void ) switch ( executing->Start.prototype ) { case THREAD_START_NUMERIC: - (*(Thread_Entry_numeric) executing->Start.entry_point)( - executing->Start.numeric_argument + executing->Wait.return_argument = + (*(Thread_Entry_numeric) executing->Start.entry_point)( + executing->Start.numeric_argument ); break; case THREAD_START_POINTER: - (*(Thread_Entry_pointer) executing->Start.entry_point)( - executing->Start.pointer_argument - ); + executing->Wait.return_argument = + (*(Thread_Entry_pointer) executing->Start.entry_point)( + executing->Start.pointer_argument + ); break; case THREAD_START_BOTH_POINTER_FIRST: - (*(Thread_Entry_both_pointer_first) executing->Start.entry_point)( - executing->Start.pointer_argument, - executing->Start.numeric_argument - ); + executing->Wait.return_argument = + (*(Thread_Entry_both_pointer_first) executing->Start.entry_point)( + executing->Start.pointer_argument, + executing->Start.numeric_argument + ); break; case THREAD_START_BOTH_NUMERIC_FIRST: - (*(Thread_Entry_both_numeric_first) executing->Start.entry_point)( - executing->Start.numeric_argument, - executing->Start.pointer_argument - ); + executing->Wait.return_argument = + (*(Thread_Entry_both_numeric_first) executing->Start.entry_point)( + executing->Start.numeric_argument, + executing->Start.pointer_argument + ); break; } + /* + * In the switch above, the return code from the user thread body + * was placed in return_argument. This assumed that if it returned + * anything (which is not supporting in all APIs), then it would be + * able to fit in a (void *). + */ + _User_extensions_Thread_exitted( executing ); _Internal_error_Occurred( |