Bug Summary

File:/home/joel/rtems-4.11-work/build/rtems/c/src/../../cpukit/posix/src/pthreadjoin.c
Location:line 64, column 9
Description:Assigned value is garbage or undefined

Annotated Source Code

1/*
2 * 16.1.3 Wait for Thread Termination, P1003.1c/Draft 10, p. 147
3 *
4 * COPYRIGHT (c) 1989-2007.
5 * On-Line Applications Research Corporation (OAR).
6 *
7 * The license and distribution terms for this file may be
8 * found in the file LICENSE in this distribution or at
9 * http://www.rtems.com/license/LICENSE.
10 *
11 * $Id: pthreadjoin.c,v 1.8 2007/11/30 20:34:13 humph Exp $
12 */
13
14#if HAVE_CONFIG_H1
15#include "config.h"
16#endif
17
18#include <pthread.h>
19#include <errno(*__errno_location ()).h>
20
21#include <rtems/system.h>
22#include <rtems/score/thread.h>
23#include <rtems/posix/pthread.h>
24
25int pthread_join(
26 pthread_t thread,
27 void **value_ptr
28)
29{
30 register Thread_Control *the_thread;
31 POSIX_API_Control *api;
32 Objects_Locations location;
33 void *return_pointer;
1
Variable 'return_pointer' declared without an initial value
34
35 the_thread = _POSIX_Threads_Get( thread, &location );
36 switch ( location ) {
2
Control jumps to 'case OBJECTS_LOCAL:' at line 38
37
38 case OBJECTS_LOCAL:
39 api = the_thread->API_Extensions[ THREAD_API_POSIX ];
40
41 if ( api->detachstate == PTHREAD_CREATE_DETACHEDPTHREAD_CREATE_DETACHED ) {
3
Taking false branch
42 _Thread_Enable_dispatch();
43 return EINVAL22;
44 }
45
46 if ( _Thread_Is_executing( the_thread ) ) {
4
Taking false branch
47 _Thread_Enable_dispatch();
48 return EDEADLK35;
49 }
50
51 /*
52 * Put ourself on the threads join list
53 */
54
55 _Thread_Executing_Per_CPU_Information.executing->Wait.return_argument = &return_pointer;
56
57 _Thread_queue_Enter_critical_section( &api->Join_List );
58
59 _Thread_queue_Enqueue( &api->Join_List, WATCHDOG_NO_TIMEOUT )_Thread_queue_Enqueue_with_handler( &api->Join_List, 0
, _Thread_queue_Timeout )
;
60
61 _Thread_Enable_dispatch();
62
63 if ( value_ptr )
5
Taking true branch
64 *value_ptr = return_pointer;
6
Assigned value is garbage or undefined
65 return 0;
66
67#if defined(RTEMS_MULTIPROCESSING)
68 case OBJECTS_REMOTE:
69#endif
70 case OBJECTS_ERROR:
71 break;
72 }
73
74 return ESRCH3;
75}