summaryrefslogtreecommitdiff
path: root/ACE/ace/OS_NS_Thread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/OS_NS_Thread.cpp')
-rw-r--r--ACE/ace/OS_NS_Thread.cpp51
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);