diff options
Diffstat (limited to 'ACE/ace/OS_NS_Thread.cpp')
-rw-r--r-- | ACE/ace/OS_NS_Thread.cpp | 51 |
1 files changed, 37 insertions, 14 deletions
diff --git a/ACE/ace/OS_NS_Thread.cpp b/ACE/ace/OS_NS_Thread.cpp index 9aec524ae8f..9b8fedbd49a 100644 --- a/ACE/ace/OS_NS_Thread.cpp +++ b/ACE/ace/OS_NS_Thread.cpp @@ -885,8 +885,12 @@ ACE_TSS_Cleanup::thread_detach_key (ACE_thread_key_t key) ACE_TSS_CLEANUP_GUARD u_int key_index = key; - ACE_ASSERT (key_index < sizeof(this->table_)/sizeof(this->table_[0]) - && this->table_[key_index].key_ == key); + ACE_ASSERT (key_index < sizeof(this->table_)/sizeof(this->table_[0])); + // If this entry was never set, just bug out. If it is set, but is the + // wrong key, assert. + if (this->table_[key_index].key_ == 0) + return 0; + ACE_ASSERT (this->table_[key_index].key_ == key); ACE_TSS_Info &info = this->table_ [key_index]; // sanity check @@ -2496,15 +2500,17 @@ ACE_OS::event_destroy (ACE_event_t *event) int ACE_OS::event_init (ACE_event_t *event, + int type, + ACE_condattr_t *attributes, int manual_reset, int initial_state, - int type, const char *name, void *arg, LPSECURITY_ATTRIBUTES sa) { #if defined (ACE_WIN32) ACE_UNUSED_ARG (type); + ACE_UNUSED_ARG (attributes); ACE_UNUSED_ARG (arg); SECURITY_ATTRIBUTES sa_buffer; SECURITY_DESCRIPTOR sd_buffer; @@ -2612,10 +2618,15 @@ ACE_OS::event_init (ACE_event_t *event, # if (defined (ACE_HAS_PTHREADS) && defined (_POSIX_THREAD_PROCESS_SHARED) && !defined (ACE_LACKS_CONDATTR_PSHARED)) || \ (!defined (ACE_USES_FIFO_SEM) && \ (!defined (ACE_HAS_POSIX_SEM) || !defined (ACE_HAS_POSIX_SEM_TIMEOUT) || defined (ACE_LACKS_NAMED_POSIX_SEM))) - int result = ACE_OS::cond_init (&event->eventdata_->condition_, - static_cast<short> (type), - name, - arg); + int result = attributes == 0 ? + ACE_OS::cond_init (&event->eventdata_->condition_, + type, + name, + arg) : + ACE_OS::cond_init (&event->eventdata_->condition_, + *attributes, + name, + arg); # else char sem_name[128]; ACE_OS::strncpy (sem_name, @@ -2625,6 +2636,7 @@ ACE_OS::event_init (ACE_event_t *event, int result = ACE_OS::sema_init (&event->semaphore_, 0, type, + attributes, sem_name, arg); # endif @@ -2648,6 +2660,7 @@ ACE_OS::event_init (ACE_event_t *event, result = ACE_OS::sema_init (&event->lock_, 0, type, + attributes, lck_name, arg); if (result == 0) @@ -2662,9 +2675,9 @@ ACE_OS::event_init (ACE_event_t *event, event->name_ = 0; event->eventdata_ = evtdata; -#if (!defined (ACE_HAS_PTHREADS) || !defined (_POSIX_THREAD_PROCESS_SHARED) || defined (ACE_LACKS_CONDATTR_PSHARED)) && \ - (defined (ACE_USES_FIFO_SEM) || \ - (defined (ACE_HAS_POSIX_SEM) && defined (ACE_HAS_POSIX_SEM_TIMEOUT) && !defined (ACE_LACKS_NAMED_POSIX_SEM))) +# if (!defined (ACE_HAS_PTHREADS) || !defined (_POSIX_THREAD_PROCESS_SHARED) || defined (ACE_LACKS_CONDATTR_PSHARED)) && \ + (defined (ACE_USES_FIFO_SEM) || \ + (defined (ACE_HAS_POSIX_SEM) && defined (ACE_HAS_POSIX_SEM_TIMEOUT) && !defined (ACE_LACKS_NAMED_POSIX_SEM))) char sem_name[128]; ACE_OS::strncpy (sem_name, name, @@ -2673,6 +2686,7 @@ ACE_OS::event_init (ACE_event_t *event, result = ACE_OS::sema_init(&event->semaphore_, 0, type, + attributes, sem_name, arg); # endif @@ -2692,6 +2706,7 @@ ACE_OS::event_init (ACE_event_t *event, result = ACE_OS::sema_init (&event->lock_, 0, type, + attributes, lck_name, arg); } @@ -2714,14 +2729,20 @@ ACE_OS::event_init (ACE_event_t *event, # if (defined (ACE_HAS_PTHREADS) && defined (_POSIX_THREAD_PROCESS_SHARED) && !defined (ACE_LACKS_CONDATTR_PSHARED)) || \ (!defined (ACE_USES_FIFO_SEM) && \ (!defined (ACE_HAS_POSIX_SEM) || !defined (ACE_HAS_POSIX_SEM_TIMEOUT) || defined (ACE_LACKS_NAMED_POSIX_SEM))) - int result = ACE_OS::cond_init (&event->eventdata_->condition_, - static_cast<short> (type), - name, - arg); + int result = attributes == 0 ? + ACE_OS::cond_init (&event->eventdata_->condition_, + type, + name, + arg) : + ACE_OS::cond_init (&event->eventdata_->condition_, + *attributes, + name, + arg); # else int result = ACE_OS::sema_init (&event->semaphore_, 0, type, + attributes, name, arg); # endif @@ -2738,6 +2759,7 @@ ACE_OS::event_init (ACE_event_t *event, result = ACE_OS::sema_init (&event->lock_, 0, type, + attributes, name, arg); if (result == 0) @@ -2751,6 +2773,7 @@ ACE_OS::event_init (ACE_event_t *event, ACE_UNUSED_ARG (manual_reset); ACE_UNUSED_ARG (initial_state); ACE_UNUSED_ARG (type); + ACE_UNUSED_ARG (attributes); ACE_UNUSED_ARG (name); ACE_UNUSED_ARG (arg); ACE_UNUSED_ARG (sa); |