This looks ok to commit.

If it compiles and didn't add any warnings in code or Doxygen,
I don't see what else could be wrong.

On 8/22/2013 8:21 AM, Sebastian Huber wrote:
Add thread parameter to _Thread_queue_Enqueue_with_handler() to avoid
access to global _Thread_Executing.
---
  cpukit/posix/src/condwaitsupp.c                |    2 +-
  cpukit/posix/src/pthreadjoin.c                 |    6 +++++-
  cpukit/posix/src/sigtimedwait.c                |    2 +-
  cpukit/rtems/src/regiongetsegment.c            |    6 +++++-
  cpukit/score/include/rtems/score/coresemimpl.h |    2 +-
  cpukit/score/include/rtems/score/threadqimpl.h |   11 +++++++----
  cpukit/score/src/corebarrierwait.c             |    2 +-
  cpukit/score/src/coremsgseize.c                |    2 +-
  cpukit/score/src/coremsgsubmit.c               |    6 +++++-
  cpukit/score/src/coremutexseize.c              |    2 +-
  cpukit/score/src/corerwlockobtainread.c        |    1 +
  cpukit/score/src/corerwlockobtainwrite.c       |    1 +
  cpukit/score/src/coresemseize.c                |    2 +-
  cpukit/score/src/mpci.c                        |   22 ++++++++++++++--------
  cpukit/score/src/threadqenqueue.c              |    4 +---
  15 files changed, 46 insertions(+), 25 deletions(-)

diff --git a/cpukit/posix/src/condwaitsupp.c b/cpukit/posix/src/condwaitsupp.c
index 86ad3aa..a13d4f7 100644
--- a/cpukit/posix/src/condwaitsupp.c
+++ b/cpukit/posix/src/condwaitsupp.c
@@ -75,7 +75,7 @@ int _POSIX_Condition_variables_Wait_support(
          executing->Wait.queue       = &the_cond->Wait_queue;
          executing->Wait.id          = *cond;
- _Thread_queue_Enqueue( &the_cond->Wait_queue, timeout );
+        _Thread_queue_Enqueue( &the_cond->Wait_queue, executing, timeout );
_Objects_Put( &the_cond->Object ); diff --git a/cpukit/posix/src/pthreadjoin.c b/cpukit/posix/src/pthreadjoin.c
index f7a9d45..6b562ec 100644
--- a/cpukit/posix/src/pthreadjoin.c
+++ b/cpukit/posix/src/pthreadjoin.c
@@ -71,7 +71,11 @@ on_EINTR:
        } else {
          executing->Wait.return_argument = &return_pointer;
          _Thread_queue_Enter_critical_section( &api->Join_List );
-        _Thread_queue_Enqueue( &api->Join_List, WATCHDOG_NO_TIMEOUT );
+        _Thread_queue_Enqueue(
+          &api->Join_List,
+          executing,
+          WATCHDOG_NO_TIMEOUT
+        );
        }
        _Objects_Put( &the_thread->Object );
diff --git a/cpukit/posix/src/sigtimedwait.c b/cpukit/posix/src/sigtimedwait.c
index ba24c85..65454ac 100644
--- a/cpukit/posix/src/sigtimedwait.c
+++ b/cpukit/posix/src/sigtimedwait.c
@@ -157,7 +157,7 @@ int sigtimedwait(
      executing->Wait.return_argument = the_info;
      _Thread_queue_Enter_critical_section( &_POSIX_signals_Wait_queue );
      _ISR_Enable( level );
-    _Thread_queue_Enqueue( &_POSIX_signals_Wait_queue, interval );
+    _Thread_queue_Enqueue( &_POSIX_signals_Wait_queue, executing, interval );
    _Thread_Enable_dispatch();
/*
diff --git a/cpukit/rtems/src/regiongetsegment.c 
b/cpukit/rtems/src/regiongetsegment.c
index 8fea5f8..52fac44 100644
--- a/cpukit/rtems/src/regiongetsegment.c
+++ b/cpukit/rtems/src/regiongetsegment.c
@@ -85,7 +85,11 @@ rtems_status_code rtems_region_get_segment(
_Thread_queue_Enter_critical_section( &the_region->Wait_queue ); - _Thread_queue_Enqueue( &the_region->Wait_queue, timeout );
+            _Thread_queue_Enqueue(
+              &the_region->Wait_queue,
+              executing,
+              timeout
+            );
_Objects_Put( &the_region->Object ); diff --git a/cpukit/score/include/rtems/score/coresemimpl.h b/cpukit/score/include/rtems/score/coresemimpl.h
index 4c3c8be..7f12a98 100644
--- a/cpukit/score/include/rtems/score/coresemimpl.h
+++ b/cpukit/score/include/rtems/score/coresemimpl.h
@@ -241,7 +241,7 @@ RTEMS_INLINE_ROUTINE void _CORE_semaphore_Seize_isr_disable(
    executing->Wait.id             = id;
    _ISR_Enable( level );
- _Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout );
+  _Thread_queue_Enqueue( &the_semaphore->Wait_queue, executing, timeout );
    _Thread_Enable_dispatch();
  }
diff --git a/cpukit/score/include/rtems/score/threadqimpl.h b/cpukit/score/include/rtems/score/threadqimpl.h
index 3d801c8..dde9b39 100644
--- a/cpukit/score/include/rtems/score/threadqimpl.h
+++ b/cpukit/score/include/rtems/score/threadqimpl.h
@@ -83,9 +83,10 @@ Thread_Control *_Thread_queue_Dequeue(
   *  This routine enqueues the currently executing thread on
   *  the_thread_queue with an optional timeout.
   */
-#define _Thread_queue_Enqueue( _the_thread_queue, _timeout ) \
+#define _Thread_queue_Enqueue( _the_thread, _the_thread_queue, _timeout ) \
    _Thread_queue_Enqueue_with_handler( \
      _the_thread_queue, \
+    _the_thread, \
      _timeout, \
      _Thread_queue_Timeout )
@@ -96,15 +97,17 @@ Thread_Control *_Thread_queue_Dequeue(
   *  starts a timeout timer.
   *
   *  @param[in] the_thread_queue pointer to threadq
+ *  @param[in] the_thread the thread to enqueue
   *  @param[in] timeout interval to wait
   *
   *  - INTERRUPT LATENCY:
   *    + single case
   */
  void _Thread_queue_Enqueue_with_handler(
-  Thread_queue_Control*        the_thread_queue,
-  Watchdog_Interval            timeout,
-  Thread_queue_Timeout_callout handler
+  Thread_queue_Control         *the_thread_queue,
+  Thread_Control               *the_thread,
+  Watchdog_Interval             timeout,
+  Thread_queue_Timeout_callout  handler
  );
/**
diff --git a/cpukit/score/src/corebarrierwait.c 
b/cpukit/score/src/corebarrierwait.c
index aa9face..97edf13 100644
--- a/cpukit/score/src/corebarrierwait.c
+++ b/cpukit/score/src/corebarrierwait.c
@@ -51,5 +51,5 @@ void _CORE_barrier_Wait(
    executing->Wait.id             = id;
    _ISR_Enable( level );
- _Thread_queue_Enqueue( &the_barrier->Wait_queue, timeout );
+  _Thread_queue_Enqueue( &the_barrier->Wait_queue, executing, timeout );
  }
diff --git a/cpukit/score/src/coremsgseize.c b/cpukit/score/src/coremsgseize.c
index b3280bf..11d83ee 100644
--- a/cpukit/score/src/coremsgseize.c
+++ b/cpukit/score/src/coremsgseize.c
@@ -121,5 +121,5 @@ void _CORE_message_queue_Seize(
    /* Wait.count will be filled in with the message priority */
    _ISR_Enable( level );
- _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
+  _Thread_queue_Enqueue( &the_message_queue->Wait_queue, executing, timeout );
  }
diff --git a/cpukit/score/src/coremsgsubmit.c b/cpukit/score/src/coremsgsubmit.c
index b0b4833..3fc4f4c 100644
--- a/cpukit/score/src/coremsgsubmit.c
+++ b/cpukit/score/src/coremsgsubmit.c
@@ -130,7 +130,11 @@ CORE_message_queue_Status _CORE_message_queue_Submit(
        executing->Wait.count = submit_type;
        _ISR_Enable( level );
- _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
+      _Thread_queue_Enqueue(
+        &the_message_queue->Wait_queue,
+        executing,
+        timeout
+      );
      }
return CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT;
diff --git a/cpukit/score/src/coremutexseize.c 
b/cpukit/score/src/coremutexseize.c
index 2cab59e..283029d 100644
--- a/cpukit/score/src/coremutexseize.c
+++ b/cpukit/score/src/coremutexseize.c
@@ -65,7 +65,7 @@ void _CORE_mutex_Seize_interrupt_blocking(
    }
the_mutex->blocked_count++;
-  _Thread_queue_Enqueue( &the_mutex->Wait_queue, timeout );
+  _Thread_queue_Enqueue( &the_mutex->Wait_queue, executing, timeout );
_Thread_Enable_dispatch();
  }
diff --git a/cpukit/score/src/corerwlockobtainread.c 
b/cpukit/score/src/corerwlockobtainread.c
index ca9a214..cfba5cf 100644
--- a/cpukit/score/src/corerwlockobtainread.c
+++ b/cpukit/score/src/corerwlockobtainread.c
@@ -86,6 +86,7 @@ void _CORE_RWLock_Obtain_for_reading(
_Thread_queue_Enqueue_with_handler(
         &the_rwlock->Wait_queue,
+       executing,
         timeout,
         _CORE_RWLock_Timeout
      );
diff --git a/cpukit/score/src/corerwlockobtainwrite.c 
b/cpukit/score/src/corerwlockobtainwrite.c
index e5f3e73..54c41d9 100644
--- a/cpukit/score/src/corerwlockobtainwrite.c
+++ b/cpukit/score/src/corerwlockobtainwrite.c
@@ -76,6 +76,7 @@ void _CORE_RWLock_Obtain_for_writing(
_Thread_queue_Enqueue_with_handler(
         &the_rwlock->Wait_queue,
+       executing,
         timeout,
         _CORE_RWLock_Timeout
      );
diff --git a/cpukit/score/src/coresemseize.c b/cpukit/score/src/coresemseize.c
index cde444b..2cbfb47 100644
--- a/cpukit/score/src/coresemseize.c
+++ b/cpukit/score/src/coresemseize.c
@@ -63,6 +63,6 @@ void _CORE_semaphore_Seize(
    executing->Wait.queue = &the_semaphore->Wait_queue;
    executing->Wait.id    = id;
    _ISR_Enable( level );
-  _Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout );
+  _Thread_queue_Enqueue( &the_semaphore->Wait_queue, executing, timeout );
  }
  #endif
diff --git a/cpukit/score/src/mpci.c b/cpukit/score/src/mpci.c
index c8cf6bd..bc28994 100644
--- a/cpukit/score/src/mpci.c
+++ b/cpukit/score/src/mpci.c
@@ -190,14 +190,16 @@ uint32_t   _MPCI_Send_request_packet (
    States_Control      extra_state
  )
  {
-  the_packet->source_tid      = _Thread_Executing->Object.id;
-  the_packet->source_priority = _Thread_Executing->current_priority;
+  Thread_Control *executing = _Thread_Executing;
+
+  the_packet->source_tid      = executing->Object.id;
+  the_packet->source_priority = executing->current_priority;
    the_packet->to_convert =
       ( the_packet->to_convert - sizeof(MP_packet_Prefix) ) / sizeof(uint32_t);
- _Thread_Executing->Wait.id = the_packet->id;
+  executing->Wait.id = the_packet->id;
- _Thread_Executing->Wait.queue = &_MPCI_Remote_blocked_threads;
+  executing->Wait.queue = &_MPCI_Remote_blocked_threads;
_Thread_Disable_dispatch(); @@ -212,14 +214,18 @@ uint32_t _MPCI_Send_request_packet (
      if (the_packet->timeout == MPCI_DEFAULT_TIMEOUT)
          the_packet->timeout = _MPCI_table->default_timeout;
- _Thread_queue_Enqueue( &_MPCI_Remote_blocked_threads, the_packet->timeout );
+    _Thread_queue_Enqueue(
+      &_MPCI_Remote_blocked_threads,
+      executing,
+      the_packet->timeout
+    );
- _Thread_Executing->current_state =
-      _States_Set( extra_state, _Thread_Executing->current_state );
+    executing->current_state =
+      _States_Set( extra_state, executing->current_state );
_Thread_Enable_dispatch(); - return _Thread_Executing->Wait.return_code;
+  return executing->Wait.return_code;
  }
void _MPCI_Send_response_packet (
diff --git a/cpukit/score/src/threadqenqueue.c 
b/cpukit/score/src/threadqenqueue.c
index 92d5546..54f85f8 100644
--- a/cpukit/score/src/threadqenqueue.c
+++ b/cpukit/score/src/threadqenqueue.c
@@ -28,11 +28,11 @@
void _Thread_queue_Enqueue_with_handler(
    Thread_queue_Control         *the_thread_queue,
+  Thread_Control               *the_thread,
    Watchdog_Interval             timeout,
    Thread_queue_Timeout_callout  handler
  )
  {
-  Thread_Control                   *the_thread;
    ISR_Level                         level;
    Thread_blocking_operation_States  sync_state;
    Thread_blocking_operation_States (*enqueue_p)(
@@ -41,8 +41,6 @@ void _Thread_queue_Enqueue_with_handler(
      ISR_Level *
    );
- the_thread = _Thread_Executing;
-
  #if defined(RTEMS_MULTIPROCESSING)
    if ( _Thread_MP_Is_receive( the_thread ) && the_thread->receive_packet )
      the_thread = _Thread_MP_Allocate_proxy( the_thread_queue->state );


--
Joel Sherrill, Ph.D.             Director of Research & Development
[email protected]        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985

_______________________________________________
rtems-devel mailing list
[email protected]
http://www.rtems.org/mailman/listinfo/rtems-devel

Reply via email to