13 #include "ns3/simulator.h"
25 NS_ASSERT (
sizeof (pthread_t) >= 4);
26 return (thread_handle >> 16) & 0xffff;
32 NS_ASSERT (
sizeof (pthread_t) >= 4);
33 return thread_handle & 0xffff;
39 NS_ASSERT (
sizeof (pthread_t) >= 4);
53 for (std::list<ThreadKeyValue>::iterator j = current->
keyValues.begin ();
56 NS_LOG_DEBUG (
"destroy key " << j->key <<
" " << j->destructor <<
" " << j->value);
57 if (j->destructor != 0 && j->value != 0)
73 std::ostringstream oss;
77 NS_ASSERT (current != 0);
88 oss <<
"Exit (" << status <<
")";
99 void *(*start_routine)(
void*);
128 const pthread_attr_t *attr,
134 NS_ASSERT (current != 0);
153 NS_ASSERT (current != 0);
155 if (process->
threads.size () == 1)
185 NS_ASSERT (current != 0);
214 if (value_ptr != NULL)
226 NS_ASSERT (current != 0);
256 NS_ASSERT (current != 0);
264 if (once_control == 0 || init_routine == 0)
268 if (*once_control == 1)
281 for (std::list<struct ThreadKeyValue>::const_iterator i = current->
keyValues.begin ();
295 NS_ASSERT (current != 0);
296 for (std::list<struct ThreadKeyValue>::const_iterator i = current->
keyValues.begin ();
310 NS_ASSERT (current != 0);
311 for (std::list<struct ThreadKeyValue>::iterator i = current->
keyValues.begin ();
316 i->value =
const_cast<void *
> (value);
326 NS_LOG_FUNCTION (current <<
UtilsGetNodeId () << key << destructor);
327 NS_ASSERT (current != 0);
328 pthread_key_t tmp = 2;
340 for (std::vector<struct Thread *>::const_iterator i = process->
threads.begin ();
341 i != process->
threads.end (); ++i)
343 struct Thread *thread = *i;
357 NS_ASSERT (current != 0);
363 for (std::vector<struct Thread *>::const_iterator i = process->
threads.begin ();
364 i != process->
threads.end (); ++i)
366 struct Thread *thread = *i;
368 for (std::list<struct ThreadKeyValue>::iterator j = thread->
keyValues.begin ();
386 NS_ASSERT (current != 0);
395 if (sigismember (&thread->
signalMask, sig) == 0)
407 int dce_pthread_sigmask (
int how,
const sigset_t *restrict
set,
408 sigset_t *restrict oset)
414 sigset_t *restrict oset)