summaryrefslogtreecommitdiff
path: root/ACE/ace/Object_Manager_Base.cpp
diff options
context:
space:
mode:
authorAdam Mitz <mitza@ociweb.com>2015-11-06 17:07:11 -0600
committerAdam Mitz <mitza@ociweb.com>2015-11-06 17:07:11 -0600
commitac5e1702c9f9bee9f1f7bfce8c1a6f3847ea6b4b (patch)
tree0e70d1f51c39e688a05a6cdc2af58408222e4a0d /ACE/ace/Object_Manager_Base.cpp
parent5272b5b81f92c298cb998b5bb0b0dbca3e7f29fe (diff)
downloadATCD-ac5e1702c9f9bee9f1f7bfce8c1a6f3847ea6b4b.tar.gz
Merged branch ace-face-safety (FACE Safety Profile import from OCITAO).
Diffstat (limited to 'ACE/ace/Object_Manager_Base.cpp')
-rw-r--r--ACE/ace/Object_Manager_Base.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/ACE/ace/Object_Manager_Base.cpp b/ACE/ace/Object_Manager_Base.cpp
index dfb1c1fa927..47cd32c36bf 100644
--- a/ACE/ace/Object_Manager_Base.cpp
+++ b/ACE/ace/Object_Manager_Base.cpp
@@ -5,6 +5,10 @@
#include "ace/OS_NS_signal.h"
#include "ace/OS_NS_stdio.h"
+#if defined (ACE_HAS_ALLOC_HOOKS)
+# include "ace/Malloc_Base.h"
+#endif /* ACE_HAS_ALLOC_HOOKS */
+
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
#if defined (ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS)
@@ -21,6 +25,17 @@ int ACE_SEH_Default_Exception_Handler (void *)
}
#endif /* ACE_HAS_WIN32_STRUCTURAL_EXCEPTIONS */
+#if defined (ACE_HAS_ALLOC_HOOKS)
+# define ACE_OS_PREALLOCATE_OBJECT(TYPE, ID)\
+ {\
+ TYPE *obj_p = 0;\
+ ACE_ALLOCATOR_RETURN (obj_p, static_cast<TYPE *>(ACE_Allocator::instance()->malloc(sizeof(TYPE))), -1); \
+ preallocated_object[ID] = (void *) obj_p;\
+ }
+# define ACE_OS_DELETE_PREALLOCATED_OBJECT(TYPE, ID)\
+ ACE_Allocator::instance()->free (preallocated_object[ID]); \
+ preallocated_object[ID] = 0;
+#else
# define ACE_OS_PREALLOCATE_OBJECT(TYPE, ID)\
{\
TYPE *obj_p = 0;\
@@ -30,6 +45,7 @@ int ACE_SEH_Default_Exception_Handler (void *)
# define ACE_OS_DELETE_PREALLOCATED_OBJECT(TYPE, ID)\
delete (TYPE *) preallocated_object[ID];\
preallocated_object[ID] = 0;
+#endif /* ACE_HAS_ALLOC_HOOKS */
ACE_Object_Manager_Base::ACE_Object_Manager_Base (void)
: object_manager_state_ (OBJ_MAN_UNINITIALIZED)
@@ -105,6 +121,8 @@ ACE_OS_Object_Manager::~ACE_OS_Object_Manager (void)
fini ();
}
+ACE_ALLOC_HOOK_DEFINE(ACE_OS_Object_Manager)
+
sigset_t *
ACE_OS_Object_Manager::default_mask (void)
{
@@ -249,7 +267,11 @@ ACE_OS_Object_Manager::init (void)
ACE_OS::set_exit_hook (&ACE_OS_Object_Manager_Internal_Exit_Hook);
}
+#if defined (ACE_HAS_ALLOC_HOOKS)
+ ACE_ALLOCATOR_RETURN (default_mask_, static_cast<sigset_t*>(ACE_Allocator::instance()->malloc(sizeof(sigset_t))), -1);
+#else
ACE_NEW_RETURN (default_mask_, sigset_t, -1);
+#endif /* ACE_HAS_ALLOC_HOOKS */
ACE_OS::sigfillset (default_mask_);
// Finally, indicate that the ACE_OS_Object_Manager instance has
@@ -317,6 +339,9 @@ ACE_OS_Object_Manager::fini (void)
if (ACE_OS::thread_mutex_destroy
// This line must not be broken to avoid tickling a bug with SunC++'s preprocessor.
(reinterpret_cast <ACE_thread_mutex_t *> (ACE_OS_Object_Manager::preallocated_object[ACE_OS_MONITOR_LOCK])) != 0)
+# ifdef ACE_LACKS_PTHREAD_MUTEX_DESTROY
+ if (errno != ENOTSUP)
+# endif
ACE_OS_Object_Manager::print_error_message (
__LINE__, ACE_TEXT ("ACE_OS_MONITOR_LOCK"));
# endif /* ! ACE_HAS_BROKEN_PREALLOCATED_OBJECTS_AFTER_FORK */
@@ -326,6 +351,9 @@ ACE_OS_Object_Manager::fini (void)
if (ACE_OS::recursive_mutex_destroy
// This line must not be broken to avoid tickling a bug with SunC++'s preprocessor.
(reinterpret_cast <ACE_recursive_thread_mutex_t *> (ACE_OS_Object_Manager::preallocated_object[ACE_TSS_CLEANUP_LOCK])) != 0)
+# ifdef ACE_LACKS_PTHREAD_MUTEX_DESTROY
+ if (errno != ENOTSUP)
+# endif
ACE_OS_Object_Manager::print_error_message (
__LINE__, ACE_TEXT ("ACE_TSS_CLEANUP_LOCK"));
# endif /* ! ACE_HAS_BROKEN_PREALLOCATED_OBJECTS_AFTER_FORK */
@@ -335,6 +363,9 @@ ACE_OS_Object_Manager::fini (void)
if (ACE_OS::thread_mutex_destroy
// This line must not be broken to avoid tickling a bug with SunC++'s preprocessor.
(reinterpret_cast <ACE_thread_mutex_t *> (ACE_OS_Object_Manager::preallocated_object [ACE_LOG_MSG_INSTANCE_LOCK])) != 0)
+# ifdef ACE_LACKS_PTHREAD_MUTEX_DESTROY
+ if (errno != ENOTSUP)
+# endif
ACE_OS_Object_Manager::print_error_message (
__LINE__, ACE_TEXT ("ACE_LOG_MSG_INSTANCE_LOCK "));
# endif /* ! ACE_HAS_BROKEN_PREALLOCATED_OBJECTS_AFTER_FORK */
@@ -369,7 +400,11 @@ ACE_OS_Object_Manager::fini (void)
#endif /* ! ACE_HAS_STATIC_PREALLOCATION */
}
+#if defined (ACE_HAS_ALLOC_HOOKS)
+ ACE_Allocator::instance()->free(default_mask_);
+#else
delete default_mask_;
+#endif /* ACE_HAS_ALLOC_HOOKS */
default_mask_ = 0;
// Indicate that this ACE_OS_Object_Manager instance has been shut down.
@@ -403,10 +438,17 @@ ACE_OS_Object_Manager::print_error_message (unsigned int line_number,
{
// To avoid duplication of these const strings in OS.o.
#if !defined (ACE_HAS_WINCE)
+# ifndef ACE_LACKS_STDERR
fprintf (stderr, "ace/Object_Manager_Base.cpp, line %u: %s ",
line_number,
ACE_TEXT_ALWAYS_CHAR (message));
+# else
+ ACE_UNUSED_ARG (line_number);
+ ACE_UNUSED_ARG (message);
+# endif
+# if !defined (ACE_LACKS_PERROR)
perror ("failed");
+# endif /* ACE_LACKS_PERROR */
#else
// @@ Need to use the following information.
ACE_UNUSED_ARG (line_number);