[PATCH 01/17] score: PR2151: _Thread_queue_Extract_with_proxy()

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Mar 25 12:49:05 UTC 2014


Avoid NULL pointer access.
---
 cpukit/score/src/threadqextractwithproxy.c |   37 ++++++++++++++-------------
 1 files changed, 19 insertions(+), 18 deletions(-)

diff --git a/cpukit/score/src/threadqextractwithproxy.c b/cpukit/score/src/threadqextractwithproxy.c
index a0bf5b3..f1c1949 100644
--- a/cpukit/score/src/threadqextractwithproxy.c
+++ b/cpukit/score/src/threadqextractwithproxy.c
@@ -31,28 +31,29 @@ bool _Thread_queue_Extract_with_proxy(
   Thread_Control       *the_thread
 )
 {
-  States_Control        state;
+  Thread_queue_Control *the_thread_queue;
 
-  state = the_thread->current_state;
+  #if defined(RTEMS_MULTIPROCESSING)
+    States_Control state;
 
-  if ( _States_Is_waiting_on_thread_queue( state ) ) {
-    #if defined(RTEMS_MULTIPROCESSING)
-      if ( _States_Is_waiting_for_rpc_reply( state ) &&
-           _States_Is_locally_blocked( state ) ) {
-        Objects_Information                  *the_information;
-        Objects_Thread_queue_Extract_callout  proxy_extract_callout;
+    state = the_thread->current_state;
+    if ( _States_Is_waiting_for_rpc_reply( state ) &&
+         _States_Is_locally_blocked( state ) ) {
+      Objects_Information                  *the_information;
+      Objects_Thread_queue_Extract_callout  proxy_extract_callout;
 
-        the_information = _Objects_Get_information_id( the_thread->Wait.id );
-        proxy_extract_callout =
-          (Objects_Thread_queue_Extract_callout) the_information->extract;
+      the_information = _Objects_Get_information_id( the_thread->Wait.id );
+      proxy_extract_callout = the_information->extract;
 
-        if ( proxy_extract_callout )
-          (*proxy_extract_callout)( the_thread );
-      }
-    #endif
-    _Thread_queue_Extract( the_thread->Wait.queue, the_thread );
+      if ( proxy_extract_callout != NULL )
+        (*proxy_extract_callout)( the_thread );
+    }
+  #endif
 
-    return true;
+  the_thread_queue = the_thread->Wait.queue;
+  if ( the_thread_queue != NULL ) {
+    return _Thread_queue_Extract( the_thread_queue, the_thread );
+  } else {
+    return false;
   }
-  return false;
 }
-- 
1.7.7




More information about the devel mailing list