Revision 792f6c74 src/urt_node.c

View differences:

src/urt_node.c
37 37
/* LOCAL VARIABLES                                                            */
38 38
/******************************************************************************/
39 39

  
40
urt_node_t localNode; //TODO
40
urt_node_t localNode;
41
static  URT_THREAD_MEMORY(_node_thread, AMIROOS_CFG_SHELL_STACKSIZE);
41 42

  
42 43
/******************************************************************************/
43 44
/* LOCAL FUNCTIONS                                                            */
......
63 64
  }
64 65
  else
65 66
  {
66
     mask = 0xFFFFFFFF;
67
     mask = ALL_EVENTS;
67 68
  }
68 69

  
69 70
  if (urtCoreGetStatus() == URT_STATUS_OK)
......
71 72
    urtCoreSynchronizeNodes(&localNode);
72 73
  }
73 74

  
74
  bool terminated = false;
75
  if (terminated /*TODO: replace with function*/)
75
  if (!urtThreadShouldTerminate())
76 76
  {
77 77
    urt_osEventMask_t temp = urtEventWait(mask, URT_EVENT_WAIT_ONE, URT_DELAY_INFINITE);
78 78
    if (temp == urtCoreGetEventMask())
......
93 93
    localNode.shutdowncallback(&localNode, urtCoreGetStatus(), arg);
94 94
  }
95 95
  urtEventUnregister(urtCoreGetEvtSource(), &localNode.listener);
96

  
97

  
96 98
  urt_osThread_t* threadToTerminate = localNode.thread;
97
  urt_osThread_t* threadToTerminateChild;
98
  while (threadToTerminate != NULL)
99
  while (threadToTerminate->children != NULL || threadToTerminate->sibling != NULL)
99 100
  {
100
    threadToTerminateChild = threadToTerminate->children;
101
    urtThreadTerminate(&threadToTerminate, URT_THREAD_TERMINATE_REQUEST);
102
    threadToTerminate = threadToTerminateChild;
101
    if (threadToTerminate->children != NULL)
102
      urtThreadTerminate(threadToTerminate->children, URT_THREAD_TERMINATE_REQUEST);
103
    if(threadToTerminate->sibling != NULL)
104
      urtThreadTerminate(threadToTerminate->sibling, URT_THREAD_TERMINATE_REQUEST);
103 105
  }
104
  urtThreadExit();
106
  urtThreadTerminate(&threadToTerminate, URT_THREAD_TERMINATE_REQUEST);
107

  
105 108
  return;
106 109
}
107 110

  
......
138 141
    urtDebugAssert(setupparams == NULL);
139 142

  
140 143
  node->next = NULL;
141
  void *memory = (void*)0x28ff44;
142
  urt_osThreadFunction_t func; //TODO: Here the hello world func?
143
  thread = urtThreadInit(memory, SIZEOF_PTR, URT_THREAD_PRIO_NORMAL_MIN, func, NULL);
144
  node->thread = thread;
144
  node->thread = urtThreadInit(_node_thread, sizeof(_node_thread), URT_THREAD_PRIO_NORMAL_MIN, _main, setupparams);
145 145
  node->setupcallback = setupcallback;
146 146
  node->setupparams = setupparams;
147 147
  node->loopcallback = loopcallback;
......
153 153
  #if (URT_CFG_PUBSUB_PROFILING || URT_CFG_RPC_PROFILING)
154 154
    node->loops = 0;
155 155
  #endif /* URT_CFG_PUBSUB_PROFILING || URT_CFG_RPC_PROFILING */
156
  urt_osMutex_t mutexTemp = urtCoreGetMutex();
157
  urtMutexLock(&mutexTemp);
156
  urt_osMutex_t* mutexTemp = urtCoreGetMutex();
157
  urtMutexLock(mutexTemp);
158 158
    node->next = urtCoreGetNodes();
159 159
    urt_node_t* nodeCore = urtCoreGetNodes();
160 160
    nodeCore = node;
161
  urtMutexUnlock(&mutexTemp);
161
  urtMutexUnlock(mutexTemp);
162 162
  localNode = *node;
163 163
  return;
164 164
}

Also available in: Unified diff