summaryrefslogtreecommitdiff
path: root/ace/Svc_Handler.cpp
diff options
context:
space:
mode:
authorSteve Huston <shuston@riverace.com>2001-12-19 00:03:08 +0000
committerSteve Huston <shuston@riverace.com>2001-12-19 00:03:08 +0000
commit9618f8b407e30b6e2ed1dc88d6b6490bee25c87f (patch)
treee2319a3e136a8c0cf82a6b8481f047d85dcf875d /ace/Svc_Handler.cpp
parent817e502ff5d3bb74f890a896ec017b091dcc7efd (diff)
downloadATCD-9618f8b407e30b6e2ed1dc88d6b6490bee25c87f.tar.gz
ChangeLogTag:Tue Dec 18 18:50:29 2001 Steve Huston <shuston@riverace.com>
Diffstat (limited to 'ace/Svc_Handler.cpp')
-rw-r--r--ace/Svc_Handler.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/ace/Svc_Handler.cpp b/ace/Svc_Handler.cpp
index f46c36d4392..9614a404e12 100644
--- a/ace/Svc_Handler.cpp
+++ b/ace/Svc_Handler.cpp
@@ -63,6 +63,35 @@ ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::operator new (size_t n)
}
}
+#if defined (ACE_HAS_NEW_NOTHROW)
+template <PR_ST_1, ACE_SYNCH_DECL> void *
+ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::operator new (size_t n,
+ const nothrow_t&)
+{
+ ACE_TRACE ("ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::operator new(nothrow)");
+
+ ACE_Dynamic *const dynamic_instance = ACE_Dynamic::instance ();
+
+ if (dynamic_instance == 0)
+ {
+ // If this ACE_ASSERT fails, it may be due to running of out TSS
+ // keys. Try using ACE_HAS_TSS_EMULATION, or increasing
+ // ACE_DEFAULT_THREAD_KEYS if already using TSS emulation.
+ ACE_ASSERT (dynamic_instance != 0);
+
+ return 0;
+ }
+ else
+ {
+ // Allocate the memory and store it (usually in thread-specific
+ // storage, depending on config flags).
+ dynamic_instance->set ();
+
+ return ::new(nothrow) char[n];
+ }
+}
+#endif /* ACE_HAS_NEW_NOTHROW */
+
template <PR_ST_1, ACE_SYNCH_DECL> void
ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::destroy (void)
{