summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-06-05 11:48:57 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-06-07 17:06:43 +0200
commit2d2352bab92c51c2fd857b9555242545bd08c95e (patch)
treede11a05e5b361a161e93c98866aa704ed24ed3ae /cpukit/rtems/src
parentscore: Add _Objects_Put_for_get_isr_disable() (diff)
downloadrtems-2d2352bab92c51c2fd857b9555242545bd08c95e.tar.bz2
score: Add and use _Objects_Put()
Add and use _Objects_Put_without_thread_dispatch(). These two functions pair with the _Objects_Get() function. This helps to introduce object specific SMP locks to avoid lock contention.
Diffstat (limited to 'cpukit/rtems/src')
-rw-r--r--cpukit/rtems/src/barrierdelete.c2
-rw-r--r--cpukit/rtems/src/barrierrelease.c2
-rw-r--r--cpukit/rtems/src/barrierwait.c2
-rw-r--r--cpukit/rtems/src/dpmemdelete.c2
-rw-r--r--cpukit/rtems/src/dpmemexternal2internal.c2
-rw-r--r--cpukit/rtems/src/dpmeminternal2external.c2
-rw-r--r--cpukit/rtems/src/eventsend.c2
-rw-r--r--cpukit/rtems/src/eventtimeout.c4
-rw-r--r--cpukit/rtems/src/msgqbroadcast.c2
-rw-r--r--cpukit/rtems/src/msgqdelete.c2
-rw-r--r--cpukit/rtems/src/msgqflush.c2
-rw-r--r--cpukit/rtems/src/msgqgetnumberpending.c2
-rw-r--r--cpukit/rtems/src/msgqreceive.c2
-rw-r--r--cpukit/rtems/src/msgqsend.c2
-rw-r--r--cpukit/rtems/src/msgqurgent.c2
-rw-r--r--cpukit/rtems/src/partdelete.c4
-rw-r--r--cpukit/rtems/src/partgetbuffer.c4
-rw-r--r--cpukit/rtems/src/partreturnbuffer.c4
-rw-r--r--cpukit/rtems/src/ratemoncancel.c4
-rw-r--r--cpukit/rtems/src/ratemondelete.c2
-rw-r--r--cpukit/rtems/src/ratemongetstatistics.c2
-rw-r--r--cpukit/rtems/src/ratemongetstatus.c4
-rw-r--r--cpukit/rtems/src/ratemonperiod.c10
-rw-r--r--cpukit/rtems/src/ratemonresetstatistics.c2
-rw-r--r--cpukit/rtems/src/ratemontimeout.c2
-rw-r--r--cpukit/rtems/src/regiongetsegment.c3
-rw-r--r--cpukit/rtems/src/rtemsobjectsetname.c2
-rw-r--r--cpukit/rtems/src/semdelete.c4
-rw-r--r--cpukit/rtems/src/semflush.c2
-rw-r--r--cpukit/rtems/src/semrelease.c4
-rw-r--r--cpukit/rtems/src/signalsend.c4
-rw-r--r--cpukit/rtems/src/systemeventsend.c2
-rw-r--r--cpukit/rtems/src/taskdelete.c13
-rw-r--r--cpukit/rtems/src/taskgetnote.c2
-rw-r--r--cpukit/rtems/src/taskissuspended.c4
-rw-r--r--cpukit/rtems/src/taskrestart.c4
-rw-r--r--cpukit/rtems/src/taskresume.c4
-rw-r--r--cpukit/rtems/src/tasksetnote.c2
-rw-r--r--cpukit/rtems/src/tasksetpriority.c2
-rw-r--r--cpukit/rtems/src/taskstart.c4
-rw-r--r--cpukit/rtems/src/tasksuspend.c4
-rw-r--r--cpukit/rtems/src/taskvariableadd.c6
-rw-r--r--cpukit/rtems/src/taskvariabledelete.c4
-rw-r--r--cpukit/rtems/src/taskvariableget.c4
-rw-r--r--cpukit/rtems/src/timercancel.c2
-rw-r--r--cpukit/rtems/src/timerdelete.c2
-rw-r--r--cpukit/rtems/src/timerfireafter.c4
-rw-r--r--cpukit/rtems/src/timerfirewhen.c2
-rw-r--r--cpukit/rtems/src/timergetinfo.c2
-rw-r--r--cpukit/rtems/src/timerreset.c4
-rw-r--r--cpukit/rtems/src/timerserverfireafter.c4
-rw-r--r--cpukit/rtems/src/timerserverfirewhen.c2
52 files changed, 84 insertions, 82 deletions
diff --git a/cpukit/rtems/src/barrierdelete.c b/cpukit/rtems/src/barrierdelete.c
index a73846dc6e..db6f9288da 100644
--- a/cpukit/rtems/src/barrierdelete.c
+++ b/cpukit/rtems/src/barrierdelete.c
@@ -47,7 +47,7 @@ rtems_status_code rtems_barrier_delete(
_Barrier_Free( the_barrier );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_barrier->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/barrierrelease.c b/cpukit/rtems/src/barrierrelease.c
index 550d82a2dd..38aaa83cc3 100644
--- a/cpukit/rtems/src/barrierrelease.c
+++ b/cpukit/rtems/src/barrierrelease.c
@@ -56,7 +56,7 @@ rtems_status_code rtems_barrier_release(
case OBJECTS_LOCAL:
*released = _CORE_barrier_Release( &the_barrier->Barrier, id, NULL );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_barrier->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/barrierwait.c b/cpukit/rtems/src/barrierwait.c
index 05b592e65b..aae06c8694 100644
--- a/cpukit/rtems/src/barrierwait.c
+++ b/cpukit/rtems/src/barrierwait.c
@@ -44,7 +44,7 @@ rtems_status_code rtems_barrier_wait(
timeout,
NULL
);
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_barrier->Object );
return _Barrier_Translate_core_barrier_return_code(
_Thread_Executing->Wait.return_code );
diff --git a/cpukit/rtems/src/dpmemdelete.c b/cpukit/rtems/src/dpmemdelete.c
index 4f78035346..6746e158b5 100644
--- a/cpukit/rtems/src/dpmemdelete.c
+++ b/cpukit/rtems/src/dpmemdelete.c
@@ -40,7 +40,7 @@ rtems_status_code rtems_port_delete(
case OBJECTS_LOCAL:
_Objects_Close( &_Dual_ported_memory_Information, &the_port->Object );
_Dual_ported_memory_Free( the_port );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_port->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/dpmemexternal2internal.c b/cpukit/rtems/src/dpmemexternal2internal.c
index f5248fe946..010429dc6d 100644
--- a/cpukit/rtems/src/dpmemexternal2internal.c
+++ b/cpukit/rtems/src/dpmemexternal2internal.c
@@ -49,7 +49,7 @@ rtems_status_code rtems_port_external_to_internal(
else
*internal = _Addresses_Add_offset( the_port->internal_base,
ending );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_port->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/dpmeminternal2external.c b/cpukit/rtems/src/dpmeminternal2external.c
index a6c8d833ae..7881d6b9a9 100644
--- a/cpukit/rtems/src/dpmeminternal2external.c
+++ b/cpukit/rtems/src/dpmeminternal2external.c
@@ -50,7 +50,7 @@ rtems_status_code rtems_port_internal_to_external(
else
*external = _Addresses_Add_offset( the_port->external_base,
ending );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_port->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/eventsend.c b/cpukit/rtems/src/eventsend.c
index a16382c048..b72317c0cb 100644
--- a/cpukit/rtems/src/eventsend.c
+++ b/cpukit/rtems/src/eventsend.c
@@ -42,7 +42,7 @@ rtems_status_code rtems_event_send(
&_Event_Sync_state,
STATES_WAITING_FOR_EVENT
);
- _Thread_Enable_dispatch();
+ _Objects_Put( &thread->Object );
sc = RTEMS_SUCCESSFUL;
break;
#ifdef RTEMS_MULTIPROCESSING
diff --git a/cpukit/rtems/src/eventtimeout.c b/cpukit/rtems/src/eventtimeout.c
index 4e595dede6..9d244f0e9b 100644
--- a/cpukit/rtems/src/eventtimeout.c
+++ b/cpukit/rtems/src/eventtimeout.c
@@ -58,7 +58,7 @@ void _Event_Timeout(
*/
if ( !the_thread->Wait.count ) {
_ISR_Enable( level );
- _Thread_Unnest_dispatch();
+ _Objects_Put_without_thread_dispatch( &the_thread->Object );
return;
}
@@ -71,7 +71,7 @@ void _Event_Timeout(
the_thread->Wait.return_code = RTEMS_TIMEOUT;
_ISR_Enable( level );
_Thread_Unblock( the_thread );
- _Thread_Unnest_dispatch();
+ _Objects_Put_without_thread_dispatch( &the_thread->Object );
break;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/msgqbroadcast.c b/cpukit/rtems/src/msgqbroadcast.c
index a1c2a9f417..c56ab1a335 100644
--- a/cpukit/rtems/src/msgqbroadcast.c
+++ b/cpukit/rtems/src/msgqbroadcast.c
@@ -70,7 +70,7 @@ rtems_status_code rtems_message_queue_broadcast(
count
);
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_message_queue->Object );
return
_Message_queue_Translate_core_message_queue_return_code( core_status );
diff --git a/cpukit/rtems/src/msgqdelete.c b/cpukit/rtems/src/msgqdelete.c
index 72fd6a077e..557ab83475 100644
--- a/cpukit/rtems/src/msgqdelete.c
+++ b/cpukit/rtems/src/msgqdelete.c
@@ -77,7 +77,7 @@ rtems_status_code rtems_message_queue_delete(
);
}
#endif
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_message_queue->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/msgqflush.c b/cpukit/rtems/src/msgqflush.c
index a14e96dae0..90b0660bab 100644
--- a/cpukit/rtems/src/msgqflush.c
+++ b/cpukit/rtems/src/msgqflush.c
@@ -69,7 +69,7 @@ rtems_status_code rtems_message_queue_flush(
case OBJECTS_LOCAL:
*count = _CORE_message_queue_Flush( &the_message_queue->message_queue );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_message_queue->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/msgqgetnumberpending.c b/cpukit/rtems/src/msgqgetnumberpending.c
index 0139144623..27d7db09bc 100644
--- a/cpukit/rtems/src/msgqgetnumberpending.c
+++ b/cpukit/rtems/src/msgqgetnumberpending.c
@@ -67,7 +67,7 @@ rtems_status_code rtems_message_queue_get_number_pending(
case OBJECTS_LOCAL:
*count = the_message_queue->message_queue.number_of_pending_messages;
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_message_queue->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/msgqreceive.c b/cpukit/rtems/src/msgqreceive.c
index 6be06ad67c..3c9d0609c3 100644
--- a/cpukit/rtems/src/msgqreceive.c
+++ b/cpukit/rtems/src/msgqreceive.c
@@ -71,7 +71,7 @@ rtems_status_code rtems_message_queue_receive(
wait,
timeout
);
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_message_queue->Object );
return _Message_queue_Translate_core_message_queue_return_code(
_Thread_Executing->Wait.return_code
);
diff --git a/cpukit/rtems/src/msgqsend.c b/cpukit/rtems/src/msgqsend.c
index 764859d745..54bb86e94a 100644
--- a/cpukit/rtems/src/msgqsend.c
+++ b/cpukit/rtems/src/msgqsend.c
@@ -86,7 +86,7 @@ rtems_status_code rtems_message_queue_send(
0 /* no timeout */
);
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_message_queue->Object );
/*
* Since this API does not allow for blocking sends, we can directly
diff --git a/cpukit/rtems/src/msgqurgent.c b/cpukit/rtems/src/msgqurgent.c
index fd749fabfc..7b157fbbc9 100644
--- a/cpukit/rtems/src/msgqurgent.c
+++ b/cpukit/rtems/src/msgqurgent.c
@@ -68,7 +68,7 @@ rtems_status_code rtems_message_queue_urgent(
false, /* sender does not block */
0 /* no timeout */
);
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_message_queue->Object );
/*
* Since this API does not allow for blocking sends, we can directly
diff --git a/cpukit/rtems/src/partdelete.c b/cpukit/rtems/src/partdelete.c
index 6aeee4e422..2248adc830 100644
--- a/cpukit/rtems/src/partdelete.c
+++ b/cpukit/rtems/src/partdelete.c
@@ -58,10 +58,10 @@ rtems_status_code rtems_partition_delete(
}
#endif
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_partition->Object );
return RTEMS_SUCCESSFUL;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_partition->Object );
return RTEMS_RESOURCE_IN_USE;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/partgetbuffer.c b/cpukit/rtems/src/partgetbuffer.c
index f281fe4e65..393cab6cd3 100644
--- a/cpukit/rtems/src/partgetbuffer.c
+++ b/cpukit/rtems/src/partgetbuffer.c
@@ -46,11 +46,11 @@ rtems_status_code rtems_partition_get_buffer(
the_buffer = _Partition_Allocate_buffer( the_partition );
if ( the_buffer ) {
the_partition->number_of_used_blocks += 1;
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_partition->Object );
*buffer = the_buffer;
return RTEMS_SUCCESSFUL;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_partition->Object );
return RTEMS_UNSATISFIED;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/partreturnbuffer.c b/cpukit/rtems/src/partreturnbuffer.c
index bec3c166c6..378b75578b 100644
--- a/cpukit/rtems/src/partreturnbuffer.c
+++ b/cpukit/rtems/src/partreturnbuffer.c
@@ -53,10 +53,10 @@ rtems_status_code rtems_partition_return_buffer(
if ( _Partition_Is_buffer_valid( buffer, the_partition ) ) {
_Partition_Free_buffer( the_partition, buffer );
the_partition->number_of_used_blocks -= 1;
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_partition->Object );
return RTEMS_SUCCESSFUL;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_partition->Object );
return RTEMS_INVALID_ADDRESS;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/ratemoncancel.c b/cpukit/rtems/src/ratemoncancel.c
index af6a972a8e..4a2e49c9c1 100644
--- a/cpukit/rtems/src/ratemoncancel.c
+++ b/cpukit/rtems/src/ratemoncancel.c
@@ -38,13 +38,13 @@ rtems_status_code rtems_rate_monotonic_cancel(
case OBJECTS_LOCAL:
if ( !_Thread_Is_executing( the_period->owner ) ) {
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_period->Object );
return RTEMS_NOT_OWNER_OF_RESOURCE;
}
(void) _Watchdog_Remove( &the_period->Timer );
the_period->state = RATE_MONOTONIC_INACTIVE;
_Scheduler_Release_job(the_period->owner, 0);
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_period->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/ratemondelete.c b/cpukit/rtems/src/ratemondelete.c
index 15498ea833..35ee9c4ff6 100644
--- a/cpukit/rtems/src/ratemondelete.c
+++ b/cpukit/rtems/src/ratemondelete.c
@@ -42,7 +42,7 @@ rtems_status_code rtems_rate_monotonic_delete(
(void) _Watchdog_Remove( &the_period->Timer );
the_period->state = RATE_MONOTONIC_INACTIVE;
_Rate_monotonic_Free( the_period );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_period->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/ratemongetstatistics.c b/cpukit/rtems/src/ratemongetstatistics.c
index 801cd9410f..eca0ce8390 100644
--- a/cpukit/rtems/src/ratemongetstatistics.c
+++ b/cpukit/rtems/src/ratemongetstatistics.c
@@ -63,7 +63,7 @@ rtems_status_code rtems_rate_monotonic_get_statistics(
dst->total_wall_time = src->total_wall_time;
#endif
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_period->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/ratemongetstatus.c b/cpukit/rtems/src/ratemongetstatus.c
index 5d0d584063..bd97bd045e 100644
--- a/cpukit/rtems/src/ratemongetstatus.c
+++ b/cpukit/rtems/src/ratemongetstatus.c
@@ -73,7 +73,7 @@ rtems_status_code rtems_rate_monotonic_get_status(
the_period, &since_last_period, &executed
);
if (!valid_status) {
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_period->Object );
return RTEMS_NOT_DEFINED;
}
@@ -90,7 +90,7 @@ rtems_status_code rtems_rate_monotonic_get_status(
#endif
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_period->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/ratemonperiod.c b/cpukit/rtems/src/ratemonperiod.c
index 91f457bbb6..2018123e25 100644
--- a/cpukit/rtems/src/ratemonperiod.c
+++ b/cpukit/rtems/src/ratemonperiod.c
@@ -245,7 +245,7 @@ rtems_status_code rtems_rate_monotonic_period(
switch ( location ) {
case OBJECTS_LOCAL:
if ( !_Thread_Is_executing( the_period->owner ) ) {
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_period->Object );
return RTEMS_NOT_OWNER_OF_RESOURCE;
}
@@ -263,7 +263,7 @@ rtems_status_code rtems_rate_monotonic_period(
return_value = RTEMS_SUCCESSFUL;
break;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_period->Object );
return( return_value );
}
@@ -287,7 +287,7 @@ rtems_status_code rtems_rate_monotonic_period(
);
_Watchdog_Insert_ticks( &the_period->Timer, length );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_period->Object );
return RTEMS_SUCCESSFUL;
}
@@ -326,7 +326,7 @@ rtems_status_code rtems_rate_monotonic_period(
if ( local_state == RATE_MONOTONIC_EXPIRED_WHILE_BLOCKING )
_Thread_Clear_state( _Thread_Executing, STATES_WAITING_FOR_PERIOD );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_period->Object );
return RTEMS_SUCCESSFUL;
}
@@ -343,7 +343,7 @@ rtems_status_code rtems_rate_monotonic_period(
_Watchdog_Insert_ticks( &the_period->Timer, length );
_Scheduler_Release_job(the_period->owner, the_period->next_length);
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_period->Object );
return RTEMS_TIMEOUT;
}
diff --git a/cpukit/rtems/src/ratemonresetstatistics.c b/cpukit/rtems/src/ratemonresetstatistics.c
index a9d3934742..4269403b52 100644
--- a/cpukit/rtems/src/ratemonresetstatistics.c
+++ b/cpukit/rtems/src/ratemonresetstatistics.c
@@ -53,7 +53,7 @@ rtems_status_code rtems_rate_monotonic_reset_statistics(
case OBJECTS_LOCAL:
_Rate_monotonic_Reset_statistics( the_period );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_period->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/ratemontimeout.c b/cpukit/rtems/src/ratemontimeout.c
index 183e62fdcc..59461d1526 100644
--- a/cpukit/rtems/src/ratemontimeout.c
+++ b/cpukit/rtems/src/ratemontimeout.c
@@ -59,7 +59,7 @@ void _Rate_monotonic_Timeout(
_Watchdog_Insert_ticks( &the_period->Timer, the_period->next_length );
} else
the_period->state = RATE_MONOTONIC_EXPIRED;
- _Thread_Unnest_dispatch();
+ _Objects_Put_without_thread_dispatch( &the_period->Object );
break;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/regiongetsegment.c b/cpukit/rtems/src/regiongetsegment.c
index 1f38e5cbce..8d52ed031b 100644
--- a/cpukit/rtems/src/regiongetsegment.c
+++ b/cpukit/rtems/src/regiongetsegment.c
@@ -79,6 +79,7 @@ rtems_status_code rtems_region_get_segment(
* dispatching disabled critical section. We have to do this
* because this thread is going to block.
*/
+ /* FIXME: Lock order reversal */
_Thread_Disable_dispatch();
_RTEMS_Unlock_allocator();
@@ -91,7 +92,7 @@ rtems_status_code rtems_region_get_segment(
_Thread_queue_Enqueue( &the_region->Wait_queue, timeout );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_region->Object );
return (rtems_status_code) executing->Wait.return_code;
}
diff --git a/cpukit/rtems/src/rtemsobjectsetname.c b/cpukit/rtems/src/rtemsobjectsetname.c
index 2f61231031..7e35225189 100644
--- a/cpukit/rtems/src/rtemsobjectsetname.c
+++ b/cpukit/rtems/src/rtemsobjectsetname.c
@@ -54,7 +54,7 @@ rtems_status_code rtems_object_set_name(
case OBJECTS_LOCAL:
_Objects_Set_name( information, the_object, name );
- _Thread_Enable_dispatch();
+ _Objects_Put( the_object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/semdelete.c b/cpukit/rtems/src/semdelete.c
index 57e00db0e5..12eb37f51a 100644
--- a/cpukit/rtems/src/semdelete.c
+++ b/cpukit/rtems/src/semdelete.c
@@ -59,7 +59,7 @@ rtems_status_code rtems_semaphore_delete(
if ( _CORE_mutex_Is_locked( &the_semaphore->Core_control.mutex ) &&
!_Attributes_Is_simple_binary_semaphore(
the_semaphore->attribute_set ) ) {
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_semaphore->Object );
return RTEMS_RESOURCE_IN_USE;
}
_CORE_mutex_Flush(
@@ -92,7 +92,7 @@ rtems_status_code rtems_semaphore_delete(
);
}
#endif
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_semaphore->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/semflush.c b/cpukit/rtems/src/semflush.c
index f6cfa7fa2c..bed91aa13f 100644
--- a/cpukit/rtems/src/semflush.c
+++ b/cpukit/rtems/src/semflush.c
@@ -68,7 +68,7 @@ rtems_status_code rtems_semaphore_flush(
CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT
);
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_semaphore->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/semrelease.c b/cpukit/rtems/src/semrelease.c
index 66009667b7..a5da108736 100644
--- a/cpukit/rtems/src/semrelease.c
+++ b/cpukit/rtems/src/semrelease.c
@@ -91,7 +91,7 @@ rtems_status_code rtems_semaphore_release(
id,
MUTEX_MP_SUPPORT
);
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_semaphore->Object );
return _Semaphore_Translate_core_mutex_return_code( mutex_status );
} else {
semaphore_status = _CORE_semaphore_Surrender(
@@ -99,7 +99,7 @@ rtems_status_code rtems_semaphore_release(
id,
MUTEX_MP_SUPPORT
);
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_semaphore->Object );
return
_Semaphore_Translate_core_semaphore_return_code( semaphore_status );
}
diff --git a/cpukit/rtems/src/signalsend.c b/cpukit/rtems/src/signalsend.c
index 5696007696..eb259303f4 100644
--- a/cpukit/rtems/src/signalsend.c
+++ b/cpukit/rtems/src/signalsend.c
@@ -56,10 +56,10 @@ rtems_status_code rtems_signal_send(
} else {
_ASR_Post_signals( signal_set, &asr->signals_pending );
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_NOT_DEFINED;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/systemeventsend.c b/cpukit/rtems/src/systemeventsend.c
index 8a0efc694b..3c3fe46616 100644
--- a/cpukit/rtems/src/systemeventsend.c
+++ b/cpukit/rtems/src/systemeventsend.c
@@ -48,7 +48,7 @@ rtems_status_code rtems_event_system_send(
&_System_event_Sync_state,
STATES_WAITING_FOR_SYSTEM_EVENT
);
- _Thread_Enable_dispatch();
+ _Objects_Put( &thread->Object );
sc = RTEMS_SUCCESSFUL;
break;
#ifdef RTEMS_MULTIPROCESSING
diff --git a/cpukit/rtems/src/taskdelete.c b/cpukit/rtems/src/taskdelete.c
index 6ab579821f..492f3e73f4 100644
--- a/cpukit/rtems/src/taskdelete.c
+++ b/cpukit/rtems/src/taskdelete.c
@@ -54,11 +54,11 @@ rtems_status_code rtems_task_delete(
the_information = _Objects_Get_information_id( the_thread->Object.id );
#if defined(RTEMS_DEBUG)
- if ( !the_information ) {
- _Thread_Enable_dispatch();
- return RTEMS_INVALID_ID;
- /* This should never happen if _Thread_Get() works right */
- }
+ if ( !the_information ) {
+ _Objects_Put( &the_thread->Object );
+ return RTEMS_INVALID_ID;
+ /* This should never happen if _Thread_Get() works right */
+ }
#endif
#if defined(RTEMS_MULTIPROCESSING)
@@ -76,8 +76,9 @@ rtems_status_code rtems_task_delete(
_RTEMS_tasks_Free( the_thread );
+ /* FIXME: Lock order reversal */
_RTEMS_Unlock_allocator();
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/taskgetnote.c b/cpukit/rtems/src/taskgetnote.c
index 65b2aa21f9..9748a1d5da 100644
--- a/cpukit/rtems/src/taskgetnote.c
+++ b/cpukit/rtems/src/taskgetnote.c
@@ -75,7 +75,7 @@ rtems_status_code rtems_task_get_note(
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
*note = api->Notepads[ notepad ];
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/taskissuspended.c b/cpukit/rtems/src/taskissuspended.c
index 6a62dd5b2a..842be740cd 100644
--- a/cpukit/rtems/src/taskissuspended.c
+++ b/cpukit/rtems/src/taskissuspended.c
@@ -60,10 +60,10 @@ rtems_status_code rtems_task_is_suspended(
case OBJECTS_LOCAL:
if ( !_States_Is_suspended( the_thread->current_state ) ) {
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_ALREADY_SUSPENDED;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/taskrestart.c b/cpukit/rtems/src/taskrestart.c
index 75fcbb342e..dcffc0a0f3 100644
--- a/cpukit/rtems/src/taskrestart.c
+++ b/cpukit/rtems/src/taskrestart.c
@@ -46,10 +46,10 @@ rtems_status_code rtems_task_restart(
case OBJECTS_LOCAL:
if ( _Thread_Restart( the_thread, NULL, argument ) ) {
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_INCORRECT_STATE;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/taskresume.c b/cpukit/rtems/src/taskresume.c
index a3a8f73571..2f59c04383 100644
--- a/cpukit/rtems/src/taskresume.c
+++ b/cpukit/rtems/src/taskresume.c
@@ -46,10 +46,10 @@ rtems_status_code rtems_task_resume(
case OBJECTS_LOCAL:
if ( _States_Is_suspended( the_thread->current_state ) ) {
_Thread_Resume( the_thread );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_INCORRECT_STATE;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/tasksetnote.c b/cpukit/rtems/src/tasksetnote.c
index b08198db4b..eb5ed9e16b 100644
--- a/cpukit/rtems/src/tasksetnote.c
+++ b/cpukit/rtems/src/tasksetnote.c
@@ -72,7 +72,7 @@ rtems_status_code rtems_task_set_note(
case OBJECTS_LOCAL:
api = the_thread->API_Extensions[ THREAD_API_RTEMS ];
api->Notepads[ notepad ] = note;
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/tasksetpriority.c b/cpukit/rtems/src/tasksetpriority.c
index 5eebe686ae..29504815a0 100644
--- a/cpukit/rtems/src/tasksetpriority.c
+++ b/cpukit/rtems/src/tasksetpriority.c
@@ -61,7 +61,7 @@ rtems_status_code rtems_task_set_priority(
the_thread->current_priority > new_priority )
_Thread_Change_priority( the_thread, new_priority, false );
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/taskstart.c b/cpukit/rtems/src/taskstart.c
index 4a168bf742..3700139da3 100644
--- a/cpukit/rtems/src/taskstart.c
+++ b/cpukit/rtems/src/taskstart.c
@@ -68,10 +68,10 @@ rtems_status_code rtems_task_start(
case OBJECTS_LOCAL:
if ( _Thread_Start(
the_thread, THREAD_START_NUMERIC, entry_point, NULL, argument ) ) {
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_INCORRECT_STATE;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/tasksuspend.c b/cpukit/rtems/src/tasksuspend.c
index 8128100c78..e6f99807e7 100644
--- a/cpukit/rtems/src/tasksuspend.c
+++ b/cpukit/rtems/src/tasksuspend.c
@@ -46,10 +46,10 @@ rtems_status_code rtems_task_suspend(
case OBJECTS_LOCAL:
if ( !_States_Is_suspended( the_thread->current_state ) ) {
_Thread_Suspend( the_thread );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_ALREADY_SUSPENDED;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/taskvariableadd.c b/cpukit/rtems/src/taskvariableadd.c
index 9a0bc3d43f..7e03b660ca 100644
--- a/cpukit/rtems/src/taskvariableadd.c
+++ b/cpukit/rtems/src/taskvariableadd.c
@@ -46,7 +46,7 @@ rtems_status_code rtems_task_variable_add(
while (tvp) {
if (tvp->ptr == ptr) {
tvp->dtor = dtor;
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
}
tvp = (rtems_task_variable_t *)tvp->next;
@@ -58,7 +58,7 @@ rtems_status_code rtems_task_variable_add(
new = (rtems_task_variable_t *)
_Workspace_Allocate(sizeof(rtems_task_variable_t));
if (new == NULL) {
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_NO_MEMORY;
}
new->gval = *ptr;
@@ -67,7 +67,7 @@ rtems_status_code rtems_task_variable_add(
new->next = (struct rtems_task_variable_tt *)the_thread->task_variables;
the_thread->task_variables = new;
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/taskvariabledelete.c b/cpukit/rtems/src/taskvariabledelete.c
index cb13b98d0a..02f2bf0113 100644
--- a/cpukit/rtems/src/taskvariabledelete.c
+++ b/cpukit/rtems/src/taskvariabledelete.c
@@ -49,13 +49,13 @@ rtems_status_code rtems_task_variable_delete(
the_thread->task_variables = (rtems_task_variable_t *)tvp->next;
_RTEMS_Tasks_Invoke_task_variable_dtor( the_thread, tvp );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
}
prev = tvp;
tvp = (rtems_task_variable_t *)tvp->next;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_INVALID_ADDRESS;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/taskvariableget.c b/cpukit/rtems/src/taskvariableget.c
index d2074b274b..338e108389 100644
--- a/cpukit/rtems/src/taskvariableget.c
+++ b/cpukit/rtems/src/taskvariableget.c
@@ -59,12 +59,12 @@ rtems_status_code rtems_task_variable_get(
* saved) value if `tid' is the current task?
*/
*result = tvp->tval;
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_SUCCESSFUL;
}
tvp = (rtems_task_variable_t *)tvp->next;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_thread->Object );
return RTEMS_INVALID_ADDRESS;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/timercancel.c b/cpukit/rtems/src/timercancel.c
index 3faf0ed930..01f583d0b2 100644
--- a/cpukit/rtems/src/timercancel.c
+++ b/cpukit/rtems/src/timercancel.c
@@ -49,7 +49,7 @@ rtems_status_code rtems_timer_cancel(
case OBJECTS_LOCAL:
if ( !_Timer_Is_dormant_class( the_timer->the_class ) )
(void) _Watchdog_Remove( &the_timer->Ticker );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_timer->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/timerdelete.c b/cpukit/rtems/src/timerdelete.c
index f25928054a..a9e4e3245b 100644
--- a/cpukit/rtems/src/timerdelete.c
+++ b/cpukit/rtems/src/timerdelete.c
@@ -41,7 +41,7 @@ rtems_status_code rtems_timer_delete(
_Objects_Close( &_Timer_Information, &the_timer->Object );
(void) _Watchdog_Remove( &the_timer->Ticker );
_Timer_Free( the_timer );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_timer->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/timerfireafter.c b/cpukit/rtems/src/timerfireafter.c
index 267c1cfd98..2c34797126 100644
--- a/cpukit/rtems/src/timerfireafter.c
+++ b/cpukit/rtems/src/timerfireafter.c
@@ -59,7 +59,7 @@ rtems_status_code rtems_timer_fire_after(
if ( the_timer->Ticker.state != WATCHDOG_INACTIVE ) {
_ISR_Enable( level );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_timer->Object );
return RTEMS_SUCCESSFUL;
}
@@ -74,7 +74,7 @@ rtems_status_code rtems_timer_fire_after(
_Watchdog_Insert_ticks( &the_timer->Ticker, ticks );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_timer->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/timerfirewhen.c b/cpukit/rtems/src/timerfirewhen.c
index 487471ffc3..9bd786b5b3 100644
--- a/cpukit/rtems/src/timerfirewhen.c
+++ b/cpukit/rtems/src/timerfirewhen.c
@@ -62,7 +62,7 @@ rtems_status_code rtems_timer_fire_when(
&the_timer->Ticker,
seconds - _TOD_Seconds_since_epoch()
);
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_timer->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/timergetinfo.c b/cpukit/rtems/src/timergetinfo.c
index c6088a1a66..c3b6ec6847 100644
--- a/cpukit/rtems/src/timergetinfo.c
+++ b/cpukit/rtems/src/timergetinfo.c
@@ -46,7 +46,7 @@ rtems_status_code rtems_timer_get_information(
the_info->initial = the_timer->Ticker.initial;
the_info->start_time = the_timer->Ticker.start_time;
the_info->stop_time = the_timer->Ticker.stop_time;
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_timer->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/timerreset.c b/cpukit/rtems/src/timerreset.c
index 0e8052161f..23ebb46744 100644
--- a/cpukit/rtems/src/timerreset.c
+++ b/cpukit/rtems/src/timerreset.c
@@ -66,7 +66,7 @@ rtems_status_code rtems_timer_reset(
*/
#if defined(RTEMS_DEBUG)
if ( !timer_server ) {
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_timer->Object );
return RTEMS_INCORRECT_STATE;
}
#endif
@@ -80,7 +80,7 @@ rtems_status_code rtems_timer_reset(
*/
status = RTEMS_NOT_DEFINED;
}
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_timer->Object );
return status;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/timerserverfireafter.c b/cpukit/rtems/src/timerserverfireafter.c
index ee8dc8f3da..27d52c2c00 100644
--- a/cpukit/rtems/src/timerserverfireafter.c
+++ b/cpukit/rtems/src/timerserverfireafter.c
@@ -63,7 +63,7 @@ rtems_status_code rtems_timer_server_fire_after(
if ( the_timer->Ticker.state != WATCHDOG_INACTIVE ) {
_ISR_Enable( level );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_timer->Object );
return RTEMS_SUCCESSFUL;
}
@@ -79,7 +79,7 @@ rtems_status_code rtems_timer_server_fire_after(
(*timer_server->schedule_operation)( timer_server, the_timer );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_timer->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)
diff --git a/cpukit/rtems/src/timerserverfirewhen.c b/cpukit/rtems/src/timerserverfirewhen.c
index 11a1e15dc8..a27095fb48 100644
--- a/cpukit/rtems/src/timerserverfirewhen.c
+++ b/cpukit/rtems/src/timerserverfirewhen.c
@@ -83,7 +83,7 @@ rtems_status_code rtems_timer_server_fire_when(
(*timer_server->schedule_operation)( timer_server, the_timer );
- _Thread_Enable_dispatch();
+ _Objects_Put( &the_timer->Object );
return RTEMS_SUCCESSFUL;
#if defined(RTEMS_MULTIPROCESSING)