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

Gedare Bloom gedare at rtems.org
Tue Mar 25 13:44:17 UTC 2014


Ok

On Tue, Mar 25, 2014 at 8:49 AM, Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
> 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
>
> _______________________________________________
> rtems-devel mailing list
> rtems-devel at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-devel



More information about the devel mailing list