summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/src
diff options
context:
space:
mode:
authorGedare Bloom <gedare@rtems.org>2016-06-09 11:33:15 -0400
committerGedare Bloom <gedare@rtems.org>2016-07-25 12:44:47 -0400
commitf23d4706169d68d3c4e90b297650f89c272716f4 (patch)
tree333bdc4b4be2ec4ad7ee80ee03229759ec60602a /cpukit/posix/src
parentscore: Fix for RTEMS_DEBUG (diff)
downloadrtems-f23d4706169d68d3c4e90b297650f89c272716f4.tar.bz2
cpukit: Add and use Watchdog_Discipline.
Clock disciplines may be WATCHDOG_RELATIVE, WATCHDOG_ABSOLUTE, or WATCHDOG_NO_TIMEOUT. A discipline of WATCHDOG_RELATIVE with a timeout of WATCHDOG_NO_TIMEOUT is equivalent to a discipline of WATCHDOG_NO_TIMEOUT. updates #2732
Diffstat (limited to 'cpukit/posix/src')
-rw-r--r--cpukit/posix/src/condwaitsupp.c3
-rw-r--r--cpukit/posix/src/mqueuerecvsupp.c2
-rw-r--r--cpukit/posix/src/mqueuesendsupp.c2
-rw-r--r--cpukit/posix/src/mutexlocksupp.c4
-rw-r--r--cpukit/posix/src/nanosleep.c1
-rw-r--r--cpukit/posix/src/pbarrierwait.c2
-rw-r--r--cpukit/posix/src/prwlockrdlock.c2
-rw-r--r--cpukit/posix/src/prwlocktimedrdlock.c2
-rw-r--r--cpukit/posix/src/prwlocktimedwrlock.c2
-rw-r--r--cpukit/posix/src/prwlocktryrdlock.c1
-rw-r--r--cpukit/posix/src/prwlocktrywrlock.c1
-rw-r--r--cpukit/posix/src/prwlockwrlock.c2
-rw-r--r--cpukit/posix/src/pthreadjoin.c1
-rw-r--r--cpukit/posix/src/semaphorewaitsupp.c2
-rw-r--r--cpukit/posix/src/sigtimedwait.c2
15 files changed, 14 insertions, 15 deletions
diff --git a/cpukit/posix/src/condwaitsupp.c b/cpukit/posix/src/condwaitsupp.c
index ebcb3c4baf..b2ed367cb7 100644
--- a/cpukit/posix/src/condwaitsupp.c
+++ b/cpukit/posix/src/condwaitsupp.c
@@ -68,12 +68,13 @@ int _POSIX_Condition_variables_Wait_support(
if ( !already_timedout ) {
_Thread_queue_Context_set_expected_level( &queue_context, 2 );
+ _Thread_queue_Context_set_timeout( &queue_context, timeout );
+ _Thread_queue_Context_set_discipline( &queue_context, WATCHDOG_RELATIVE );
_Thread_queue_Enqueue_critical(
&the_cond->Wait_queue.Queue,
POSIX_CONDITION_VARIABLES_TQ_OPERATIONS,
executing,
STATES_WAITING_FOR_CONDITION_VARIABLE,
- timeout,
&queue_context
);
} else {
diff --git a/cpukit/posix/src/mqueuerecvsupp.c b/cpukit/posix/src/mqueuerecvsupp.c
index cbb0dc08b8..dcb81787a1 100644
--- a/cpukit/posix/src/mqueuerecvsupp.c
+++ b/cpukit/posix/src/mqueuerecvsupp.c
@@ -97,13 +97,13 @@ ssize_t _POSIX_Message_queue_Receive_support(
* Now perform the actual message receive
*/
executing = _Thread_Executing;
+ _Thread_queue_Context_set_relative_timeout( &queue_context, timeout );
status = _CORE_message_queue_Seize(
&the_mq->Message_queue,
executing,
msg_ptr,
&length_out,
do_wait,
- timeout,
&queue_context
);
diff --git a/cpukit/posix/src/mqueuesendsupp.c b/cpukit/posix/src/mqueuesendsupp.c
index 9785fb2086..3fd51a4eeb 100644
--- a/cpukit/posix/src/mqueuesendsupp.c
+++ b/cpukit/posix/src/mqueuesendsupp.c
@@ -92,6 +92,7 @@ int _POSIX_Message_queue_Send_support(
* Now perform the actual message receive
*/
executing = _Thread_Executing;
+ _Thread_queue_Context_set_relative_timeout( &queue_context, timeout );
status = _CORE_message_queue_Submit(
&the_mq->Message_queue,
executing,
@@ -99,7 +100,6 @@ int _POSIX_Message_queue_Send_support(
msg_len,
_POSIX_Message_queue_Priority_to_core( msg_prio ),
do_wait,
- timeout,
&queue_context
);
return _POSIX_Zero_or_minus_one_plus_errno( status );
diff --git a/cpukit/posix/src/mutexlocksupp.c b/cpukit/posix/src/mutexlocksupp.c
index d3d07f68e8..1da6238d1d 100644
--- a/cpukit/posix/src/mutexlocksupp.c
+++ b/cpukit/posix/src/mutexlocksupp.c
@@ -63,6 +63,7 @@ int _POSIX_Mutex_Lock_support(
}
executing = _Thread_Executing;
+ _Thread_queue_Context_set_relative_timeout( &queue_context, timeout );
switch ( the_mutex->protocol ) {
case POSIX_MUTEX_PRIORITY_CEILING:
@@ -70,7 +71,6 @@ int _POSIX_Mutex_Lock_support(
&the_mutex->Mutex,
executing,
wait,
- timeout,
_POSIX_Mutex_Lock_nested,
&queue_context
);
@@ -81,7 +81,6 @@ int _POSIX_Mutex_Lock_support(
POSIX_MUTEX_NO_PROTOCOL_TQ_OPERATIONS,
executing,
wait,
- timeout,
_POSIX_Mutex_Lock_nested,
&queue_context
);
@@ -92,7 +91,6 @@ int _POSIX_Mutex_Lock_support(
&the_mutex->Mutex.Recursive,
executing,
wait,
- timeout,
_POSIX_Mutex_Lock_nested,
&queue_context
);
diff --git a/cpukit/posix/src/nanosleep.c b/cpukit/posix/src/nanosleep.c
index e0e1b2676e..8fc86d6503 100644
--- a/cpukit/posix/src/nanosleep.c
+++ b/cpukit/posix/src/nanosleep.c
@@ -93,6 +93,7 @@ int nanosleep(
executing,
STATES_DELAYING | STATES_INTERRUPTIBLE_BY_SIGNAL,
ticks,
+ WATCHDOG_RELATIVE,
1
);
diff --git a/cpukit/posix/src/pbarrierwait.c b/cpukit/posix/src/pbarrierwait.c
index 0197e46702..117beac553 100644
--- a/cpukit/posix/src/pbarrierwait.c
+++ b/cpukit/posix/src/pbarrierwait.c
@@ -41,11 +41,11 @@ int pthread_barrier_wait(
return EINVAL;
}
+ _Thread_queue_Context_set_no_timeout( &queue_context );
status = _CORE_barrier_Seize(
&the_barrier->Barrier,
_Thread_Executing,
true,
- WATCHDOG_NO_TIMEOUT,
&queue_context
);
return _POSIX_Get_error( status );
diff --git a/cpukit/posix/src/prwlockrdlock.c b/cpukit/posix/src/prwlockrdlock.c
index 295148e4bf..5b15f5568f 100644
--- a/cpukit/posix/src/prwlockrdlock.c
+++ b/cpukit/posix/src/prwlockrdlock.c
@@ -35,11 +35,11 @@ int pthread_rwlock_rdlock(
return EINVAL;
}
+ _Thread_queue_Context_set_no_timeout( &queue_context );
status = _CORE_RWLock_Seize_for_reading(
&the_rwlock->RWLock,
_Thread_Executing,
true, /* we are willing to wait forever */
- 0,
&queue_context
);
return _POSIX_Get_error( status );
diff --git a/cpukit/posix/src/prwlocktimedrdlock.c b/cpukit/posix/src/prwlocktimedrdlock.c
index 1c1059051b..c1a77e9b3c 100644
--- a/cpukit/posix/src/prwlocktimedrdlock.c
+++ b/cpukit/posix/src/prwlocktimedrdlock.c
@@ -56,11 +56,11 @@ int pthread_rwlock_timedrdlock(
return EINVAL;
}
+ _Thread_queue_Context_set_relative_timeout( &queue_context, ticks );
status = _CORE_RWLock_Seize_for_reading(
&the_rwlock->RWLock,
_Thread_Executing,
do_wait,
- ticks,
&queue_context
);
diff --git a/cpukit/posix/src/prwlocktimedwrlock.c b/cpukit/posix/src/prwlocktimedwrlock.c
index 8080a8a920..b7a9028a35 100644
--- a/cpukit/posix/src/prwlocktimedwrlock.c
+++ b/cpukit/posix/src/prwlocktimedwrlock.c
@@ -58,11 +58,11 @@ int pthread_rwlock_timedwrlock(
return EINVAL;
}
+ _Thread_queue_Context_set_relative_timeout( &queue_context, ticks );
status = _CORE_RWLock_Seize_for_writing(
&the_rwlock->RWLock,
_Thread_Executing,
do_wait,
- ticks,
&queue_context
);
diff --git a/cpukit/posix/src/prwlocktryrdlock.c b/cpukit/posix/src/prwlocktryrdlock.c
index 5c6931ec0d..052f1b011e 100644
--- a/cpukit/posix/src/prwlocktryrdlock.c
+++ b/cpukit/posix/src/prwlocktryrdlock.c
@@ -39,7 +39,6 @@ int pthread_rwlock_tryrdlock(
&the_rwlock->RWLock,
_Thread_Executing,
false, /* do not wait for the rwlock */
- 0,
&queue_context
);
return _POSIX_Get_error( status );
diff --git a/cpukit/posix/src/prwlocktrywrlock.c b/cpukit/posix/src/prwlocktrywrlock.c
index 1181382fca..976e7a84ac 100644
--- a/cpukit/posix/src/prwlocktrywrlock.c
+++ b/cpukit/posix/src/prwlocktrywrlock.c
@@ -39,7 +39,6 @@ int pthread_rwlock_trywrlock(
&the_rwlock->RWLock,
_Thread_Executing,
false, /* we are not willing to wait */
- 0,
&queue_context
);
return _POSIX_Get_error( status );
diff --git a/cpukit/posix/src/prwlockwrlock.c b/cpukit/posix/src/prwlockwrlock.c
index 4592aaa04e..a78554f878 100644
--- a/cpukit/posix/src/prwlockwrlock.c
+++ b/cpukit/posix/src/prwlockwrlock.c
@@ -39,11 +39,11 @@ int pthread_rwlock_wrlock(
return EINVAL;
}
+ _Thread_queue_Context_set_no_timeout( &queue_context );
status = _CORE_RWLock_Seize_for_writing(
&the_rwlock->RWLock,
_Thread_Executing,
true, /* do not timeout -- wait forever */
- 0,
&queue_context
);
return _POSIX_Get_error( status );
diff --git a/cpukit/posix/src/pthreadjoin.c b/cpukit/posix/src/pthreadjoin.c
index 86b805132a..641031c20d 100644
--- a/cpukit/posix/src/pthreadjoin.c
+++ b/cpukit/posix/src/pthreadjoin.c
@@ -40,6 +40,7 @@ static int _POSIX_Threads_Join( pthread_t thread, void **value_ptr )
_Thread_queue_Context_initialize( &queue_context );
_Thread_queue_Context_set_expected_level( &queue_context, 1 );
+ _Thread_queue_Context_set_no_timeout( &queue_context );
the_thread = _Thread_Get( thread, &queue_context.Lock_context );
if ( the_thread == NULL ) {
diff --git a/cpukit/posix/src/semaphorewaitsupp.c b/cpukit/posix/src/semaphorewaitsupp.c
index 9ba8d55894..a4c43fd704 100644
--- a/cpukit/posix/src/semaphorewaitsupp.c
+++ b/cpukit/posix/src/semaphorewaitsupp.c
@@ -41,12 +41,12 @@ int _POSIX_Semaphore_Wait_support(
rtems_set_errno_and_return_minus_one( EINVAL );
}
+ _Thread_queue_Context_set_relative_timeout( &queue_context, timeout );
status = _CORE_semaphore_Seize(
&the_semaphore->Semaphore,
POSIX_SEMAPHORE_TQ_OPERATIONS,
_Thread_Executing,
blocking,
- timeout,
&queue_context
);
return _POSIX_Zero_or_minus_one_plus_errno( status );
diff --git a/cpukit/posix/src/sigtimedwait.c b/cpukit/posix/src/sigtimedwait.c
index 7855bb0080..0e8518ed75 100644
--- a/cpukit/posix/src/sigtimedwait.c
+++ b/cpukit/posix/src/sigtimedwait.c
@@ -153,12 +153,12 @@ int sigtimedwait(
executing->Wait.option = *set;
executing->Wait.return_argument = the_info;
_Thread_queue_Context_set_expected_level( &queue_context, 1 );
+ _Thread_queue_Context_set_relative_timeout( &queue_context, interval );
_Thread_queue_Enqueue_critical(
&_POSIX_signals_Wait_queue.Queue,
POSIX_SIGNALS_TQ_OPERATIONS,
executing,
STATES_WAITING_FOR_SIGNAL | STATES_INTERRUPTIBLE_BY_SIGNAL,
- interval,
&queue_context
);