sigtimedwait passes initial test cases of timeout and simple satisfaction.

This commit is contained in:
Mark Johannes
1996-06-13 22:16:47 +00:00
parent 36197e539e
commit 9e28da4165
2 changed files with 10 additions and 2 deletions

View File

@@ -140,7 +140,7 @@ boolean _POSIX_signals_Unblock_thread(
if ( (the_thread->Wait.option & mask) || (~api->signals_blocked & mask) ) { if ( (the_thread->Wait.option & mask) || (~api->signals_blocked & mask) ) {
the_thread->Wait.return_code = EINTR; the_thread->Wait.return_code = EINTR;
the_info = (siginfo_t *) _Thread_Executing->Wait.return_argument; the_info = (siginfo_t *) the_thread->Wait.return_argument;
if ( !info ) { if ( !info ) {
the_info->si_signo = signo; the_info->si_signo = signo;
@@ -343,6 +343,7 @@ restart:
_ISR_Enable( level ); _ISR_Enable( level );
return; return;
} }
_ISR_Enable( level );
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) { for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
@@ -801,7 +802,10 @@ int sigtimedwait(
the_info->si_value.sival_int = 0; the_info->si_value.sival_int = 0;
} }
the_info->si_signo = -1;
_Thread_Disable_dispatch(); _Thread_Disable_dispatch();
the_thread->Wait.queue = &_POSIX_signals_Wait_queue;
the_thread->Wait.return_code = EINTR; the_thread->Wait.return_code = EINTR;
the_thread->Wait.option = *set; the_thread->Wait.option = *set;
the_thread->Wait.return_argument = (void *) the_info; the_thread->Wait.return_argument = (void *) the_info;

View File

@@ -140,7 +140,7 @@ boolean _POSIX_signals_Unblock_thread(
if ( (the_thread->Wait.option & mask) || (~api->signals_blocked & mask) ) { if ( (the_thread->Wait.option & mask) || (~api->signals_blocked & mask) ) {
the_thread->Wait.return_code = EINTR; the_thread->Wait.return_code = EINTR;
the_info = (siginfo_t *) _Thread_Executing->Wait.return_argument; the_info = (siginfo_t *) the_thread->Wait.return_argument;
if ( !info ) { if ( !info ) {
the_info->si_signo = signo; the_info->si_signo = signo;
@@ -343,6 +343,7 @@ restart:
_ISR_Enable( level ); _ISR_Enable( level );
return; return;
} }
_ISR_Enable( level );
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) { for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
@@ -801,7 +802,10 @@ int sigtimedwait(
the_info->si_value.sival_int = 0; the_info->si_value.sival_int = 0;
} }
the_info->si_signo = -1;
_Thread_Disable_dispatch(); _Thread_Disable_dispatch();
the_thread->Wait.queue = &_POSIX_signals_Wait_queue;
the_thread->Wait.return_code = EINTR; the_thread->Wait.return_code = EINTR;
the_thread->Wait.option = *set; the_thread->Wait.option = *set;
the_thread->Wait.return_argument = (void *) the_info; the_thread->Wait.return_argument = (void *) the_info;