summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog-97b18
-rw-r--r--ace/ACE_Library.mak515
-rw-r--r--ace/ACE_Library.mdpbin163328 -> 163328 bytes
-rw-r--r--ace/Atomic_Op.i8
-rw-r--r--ace/Svc_Handler.cpp3
-rw-r--r--ace/Synch_T.h3
-rw-r--r--tests/Notify_Performance_Test.cpp228
-rw-r--r--tests/Reactor_Performance_Test.cpp374
-rw-r--r--tests/tests.mak430
-rw-r--r--tests/tests.mdpbin18590 -> 19081 bytes
10 files changed, 1568 insertions, 11 deletions
diff --git a/ChangeLog-97b b/ChangeLog-97b
index 42243b87b22..b341f61d2cd 100644
--- a/ChangeLog-97b
+++ b/ChangeLog-97b
@@ -1,3 +1,21 @@
+Tue Oct 14 02:49:02 1997 <irfan@TWOSTEP>
+
+ * tests/Notify_Performance_Test.cpp: New performance test. This
+ test is used to time the notification mechanisms of the
+ ACE_Reactors. Both the WFMO_Reactor and Select_Reactor can be
+ tested. The notify() mechanism can also be tested with or
+ without data.
+
+ * tests/Reactor_Performance_Test.cpp: New performance test. This
+ test is used to time the dispatching mechanisms of the
+ ACE_Reactors. Both the WFMO_Reactor and Select_Reactor can be
+ tested.
+
+ * ace/Svc_Handler.cpp (shutdown): Change READ_MASK | WRITE_MASK to
+ ALL_EVENTS_MASK.
+
+ * ace/Atomic_Op (value): Added an explicit value accessor.
+
Tue Oct 14 01:50:34 1997 Douglas C. Schmidt <schmidt@cs.wustl.edu>
* ACE version 4.3.17, released Tue Oct 14 01:50:34 1997.
diff --git a/ace/ACE_Library.mak b/ace/ACE_Library.mak
index 2d6e1358a54..d4cd5d73353 100644
--- a/ace/ACE_Library.mak
+++ b/ace/ACE_Library.mak
@@ -131,6 +131,7 @@ CLEAN :
-@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -315,6 +316,7 @@ LINK32_OBJS= \
"$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -465,6 +467,7 @@ CLEAN :
-@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -634,6 +637,7 @@ LIB32_OBJS= \
"$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -784,6 +788,7 @@ CLEAN :
-@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -953,6 +958,7 @@ LIB32_OBJS= \
"$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -1103,6 +1109,7 @@ CLEAN :
-@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -1272,6 +1279,7 @@ LIB32_OBJS= \
"$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -1422,6 +1430,7 @@ CLEAN :
-@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -1591,6 +1600,7 @@ LIB32_OBJS= \
"$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -1741,6 +1751,7 @@ CLEAN :
-@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -1925,6 +1936,7 @@ LINK32_OBJS= \
"$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -2075,6 +2087,7 @@ CLEAN :
-@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -2255,6 +2268,7 @@ LINK32_OBJS= \
"$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -2405,6 +2419,7 @@ CLEAN :
-@erase "$(INTDIR)\OS.obj"
-@erase "$(INTDIR)\Parse_Node.obj"
-@erase "$(INTDIR)\Pipe.obj"
+ -@erase "$(INTDIR)\Priority_Reactor.obj"
-@erase "$(INTDIR)\Proactor.obj"
-@erase "$(INTDIR)\Process.obj"
-@erase "$(INTDIR)\Process_Manager.obj"
@@ -2585,6 +2600,7 @@ LINK32_OBJS= \
"$(INTDIR)\OS.obj" \
"$(INTDIR)\Parse_Node.obj" \
"$(INTDIR)\Pipe.obj" \
+ "$(INTDIR)\Priority_Reactor.obj" \
"$(INTDIR)\Proactor.obj" \
"$(INTDIR)\Process.obj" \
"$(INTDIR)\Process_Manager.obj" \
@@ -13616,6 +13632,125 @@ DEP_CPP_WFMO_=\
!ENDIF
# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=.\Priority_Reactor.cpp
+DEP_CPP_PRIOR=\
+ {$(INCLUDE)}"\.\ACE.h"\
+ {$(INCLUDE)}"\.\ACE.i"\
+ {$(INCLUDE)}"\.\Atomic_Op.i"\
+ {$(INCLUDE)}"\.\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\.\Auto_Ptr.h"\
+ {$(INCLUDE)}"\.\Auto_Ptr.i"\
+ {$(INCLUDE)}"\.\config-win32-common.h"\
+ {$(INCLUDE)}"\.\config-win32.h"\
+ {$(INCLUDE)}"\.\config.h"\
+ {$(INCLUDE)}"\.\Containers.cpp"\
+ {$(INCLUDE)}"\.\Containers.h"\
+ {$(INCLUDE)}"\.\Containers.i"\
+ {$(INCLUDE)}"\.\Event_Handler.h"\
+ {$(INCLUDE)}"\.\Event_Handler.i"\
+ {$(INCLUDE)}"\.\Free_List.cpp"\
+ {$(INCLUDE)}"\.\Free_List.h"\
+ {$(INCLUDE)}"\.\Free_List.i"\
+ {$(INCLUDE)}"\.\Handle_Set.h"\
+ {$(INCLUDE)}"\.\Handle_Set.i"\
+ {$(INCLUDE)}"\.\Local_Tokens.h"\
+ {$(INCLUDE)}"\.\Local_Tokens.i"\
+ {$(INCLUDE)}"\.\Log_Msg.h"\
+ {$(INCLUDE)}"\.\Log_Priority.h"\
+ {$(INCLUDE)}"\.\Log_Record.h"\
+ {$(INCLUDE)}"\.\Log_Record.i"\
+ {$(INCLUDE)}"\.\Malloc.h"\
+ {$(INCLUDE)}"\.\Malloc.i"\
+ {$(INCLUDE)}"\.\Malloc_T.cpp"\
+ {$(INCLUDE)}"\.\Malloc_T.h"\
+ {$(INCLUDE)}"\.\Malloc_T.i"\
+ {$(INCLUDE)}"\.\Managed_Object.cpp"\
+ {$(INCLUDE)}"\.\Managed_Object.h"\
+ {$(INCLUDE)}"\.\Managed_Object.i"\
+ {$(INCLUDE)}"\.\Map_Manager.cpp"\
+ {$(INCLUDE)}"\.\Map_Manager.h"\
+ {$(INCLUDE)}"\.\Map_Manager.i"\
+ {$(INCLUDE)}"\.\Mem_Map.h"\
+ {$(INCLUDE)}"\.\Mem_Map.i"\
+ {$(INCLUDE)}"\.\Memory_Pool.h"\
+ {$(INCLUDE)}"\.\Memory_Pool.i"\
+ {$(INCLUDE)}"\.\Object_Manager.h"\
+ {$(INCLUDE)}"\.\Object_Manager.i"\
+ {$(INCLUDE)}"\.\OS.h"\
+ {$(INCLUDE)}"\.\OS.i"\
+ {$(INCLUDE)}"\.\Pipe.h"\
+ {$(INCLUDE)}"\.\Pipe.i"\
+ {$(INCLUDE)}"\.\Priority_Reactor.h"\
+ {$(INCLUDE)}"\.\Priority_Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor.h"\
+ {$(INCLUDE)}"\.\Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor_Impl.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.i"\
+ {$(INCLUDE)}"\.\Service_Config.h"\
+ {$(INCLUDE)}"\.\Service_Config.i"\
+ {$(INCLUDE)}"\.\Service_Object.h"\
+ {$(INCLUDE)}"\.\Service_Object.i"\
+ {$(INCLUDE)}"\.\Shared_Object.h"\
+ {$(INCLUDE)}"\.\Shared_Object.i"\
+ {$(INCLUDE)}"\.\Signal.h"\
+ {$(INCLUDE)}"\.\Signal.i"\
+ {$(INCLUDE)}"\.\SString.h"\
+ {$(INCLUDE)}"\.\SString.i"\
+ {$(INCLUDE)}"\.\stdcpp.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\.\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\.\Synch.h"\
+ {$(INCLUDE)}"\.\Synch.i"\
+ {$(INCLUDE)}"\.\Synch_Options.h"\
+ {$(INCLUDE)}"\.\Synch_T.cpp"\
+ {$(INCLUDE)}"\.\Synch_T.h"\
+ {$(INCLUDE)}"\.\Synch_T.i"\
+ {$(INCLUDE)}"\.\Thread.h"\
+ {$(INCLUDE)}"\.\Thread.i"\
+ {$(INCLUDE)}"\.\Timer_Queue.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\.\Token.h"\
+ {$(INCLUDE)}"\.\Token.i"\
+ {$(INCLUDE)}"\.\Trace.h"\
+ {$(INCLUDE)}"\.\ws2tcpip.h"\
+
+
+!IF "$(CFG)" == "ACE dynamic library - Win32 Debug"
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Unicode Debug"
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Unicode Release"
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "ACE dynamic library - Win32 Release"
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ENDIF
+
+# End Source File
# End Target
################################################################################
# Begin Target
@@ -24571,6 +24706,386 @@ DEP_CPP_SELEC=\
!ENDIF
# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=.\Priority_Reactor.cpp
+
+!IF "$(CFG)" == "ACE static library - Win32 Release"
+
+DEP_CPP_PRIOR=\
+ {$(INCLUDE)}"\.\ACE.h"\
+ {$(INCLUDE)}"\.\ACE.i"\
+ {$(INCLUDE)}"\.\Atomic_Op.i"\
+ {$(INCLUDE)}"\.\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\.\Auto_Ptr.h"\
+ {$(INCLUDE)}"\.\Auto_Ptr.i"\
+ {$(INCLUDE)}"\.\config-win32-common.h"\
+ {$(INCLUDE)}"\.\config-win32.h"\
+ {$(INCLUDE)}"\.\config.h"\
+ {$(INCLUDE)}"\.\Containers.cpp"\
+ {$(INCLUDE)}"\.\Containers.h"\
+ {$(INCLUDE)}"\.\Containers.i"\
+ {$(INCLUDE)}"\.\Event_Handler.h"\
+ {$(INCLUDE)}"\.\Event_Handler.i"\
+ {$(INCLUDE)}"\.\Free_List.cpp"\
+ {$(INCLUDE)}"\.\Free_List.h"\
+ {$(INCLUDE)}"\.\Free_List.i"\
+ {$(INCLUDE)}"\.\Handle_Set.h"\
+ {$(INCLUDE)}"\.\Handle_Set.i"\
+ {$(INCLUDE)}"\.\Local_Tokens.h"\
+ {$(INCLUDE)}"\.\Local_Tokens.i"\
+ {$(INCLUDE)}"\.\Log_Msg.h"\
+ {$(INCLUDE)}"\.\Log_Priority.h"\
+ {$(INCLUDE)}"\.\Log_Record.h"\
+ {$(INCLUDE)}"\.\Log_Record.i"\
+ {$(INCLUDE)}"\.\Malloc.h"\
+ {$(INCLUDE)}"\.\Malloc.i"\
+ {$(INCLUDE)}"\.\Malloc_T.cpp"\
+ {$(INCLUDE)}"\.\Malloc_T.h"\
+ {$(INCLUDE)}"\.\Malloc_T.i"\
+ {$(INCLUDE)}"\.\Managed_Object.cpp"\
+ {$(INCLUDE)}"\.\Managed_Object.h"\
+ {$(INCLUDE)}"\.\Managed_Object.i"\
+ {$(INCLUDE)}"\.\Map_Manager.cpp"\
+ {$(INCLUDE)}"\.\Map_Manager.h"\
+ {$(INCLUDE)}"\.\Map_Manager.i"\
+ {$(INCLUDE)}"\.\Mem_Map.h"\
+ {$(INCLUDE)}"\.\Mem_Map.i"\
+ {$(INCLUDE)}"\.\Memory_Pool.h"\
+ {$(INCLUDE)}"\.\Memory_Pool.i"\
+ {$(INCLUDE)}"\.\Object_Manager.h"\
+ {$(INCLUDE)}"\.\Object_Manager.i"\
+ {$(INCLUDE)}"\.\OS.h"\
+ {$(INCLUDE)}"\.\OS.i"\
+ {$(INCLUDE)}"\.\Pipe.h"\
+ {$(INCLUDE)}"\.\Pipe.i"\
+ {$(INCLUDE)}"\.\Priority_Reactor.h"\
+ {$(INCLUDE)}"\.\Priority_Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor.h"\
+ {$(INCLUDE)}"\.\Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor_Impl.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.i"\
+ {$(INCLUDE)}"\.\Service_Config.h"\
+ {$(INCLUDE)}"\.\Service_Config.i"\
+ {$(INCLUDE)}"\.\Service_Object.h"\
+ {$(INCLUDE)}"\.\Service_Object.i"\
+ {$(INCLUDE)}"\.\Shared_Object.h"\
+ {$(INCLUDE)}"\.\Shared_Object.i"\
+ {$(INCLUDE)}"\.\Signal.h"\
+ {$(INCLUDE)}"\.\Signal.i"\
+ {$(INCLUDE)}"\.\SString.h"\
+ {$(INCLUDE)}"\.\SString.i"\
+ {$(INCLUDE)}"\.\stdcpp.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\.\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\.\Synch.h"\
+ {$(INCLUDE)}"\.\Synch.i"\
+ {$(INCLUDE)}"\.\Synch_Options.h"\
+ {$(INCLUDE)}"\.\Synch_T.cpp"\
+ {$(INCLUDE)}"\.\Synch_T.h"\
+ {$(INCLUDE)}"\.\Synch_T.i"\
+ {$(INCLUDE)}"\.\Thread.h"\
+ {$(INCLUDE)}"\.\Thread.i"\
+ {$(INCLUDE)}"\.\Timer_Queue.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\.\Token.h"\
+ {$(INCLUDE)}"\.\Token.i"\
+ {$(INCLUDE)}"\.\Trace.h"\
+ {$(INCLUDE)}"\.\ws2tcpip.h"\
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "ACE static library - Win32 Debug"
+
+DEP_CPP_PRIOR=\
+ {$(INCLUDE)}"\.\ACE.h"\
+ {$(INCLUDE)}"\.\ACE.i"\
+ {$(INCLUDE)}"\.\Atomic_Op.i"\
+ {$(INCLUDE)}"\.\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\.\Auto_Ptr.h"\
+ {$(INCLUDE)}"\.\Auto_Ptr.i"\
+ {$(INCLUDE)}"\.\config-win32-common.h"\
+ {$(INCLUDE)}"\.\config-win32.h"\
+ {$(INCLUDE)}"\.\config.h"\
+ {$(INCLUDE)}"\.\Containers.cpp"\
+ {$(INCLUDE)}"\.\Containers.h"\
+ {$(INCLUDE)}"\.\Containers.i"\
+ {$(INCLUDE)}"\.\Event_Handler.h"\
+ {$(INCLUDE)}"\.\Event_Handler.i"\
+ {$(INCLUDE)}"\.\Free_List.cpp"\
+ {$(INCLUDE)}"\.\Free_List.h"\
+ {$(INCLUDE)}"\.\Free_List.i"\
+ {$(INCLUDE)}"\.\Handle_Set.h"\
+ {$(INCLUDE)}"\.\Handle_Set.i"\
+ {$(INCLUDE)}"\.\Local_Tokens.h"\
+ {$(INCLUDE)}"\.\Local_Tokens.i"\
+ {$(INCLUDE)}"\.\Log_Msg.h"\
+ {$(INCLUDE)}"\.\Log_Priority.h"\
+ {$(INCLUDE)}"\.\Log_Record.h"\
+ {$(INCLUDE)}"\.\Log_Record.i"\
+ {$(INCLUDE)}"\.\Malloc.h"\
+ {$(INCLUDE)}"\.\Malloc.i"\
+ {$(INCLUDE)}"\.\Malloc_T.cpp"\
+ {$(INCLUDE)}"\.\Malloc_T.h"\
+ {$(INCLUDE)}"\.\Malloc_T.i"\
+ {$(INCLUDE)}"\.\Managed_Object.cpp"\
+ {$(INCLUDE)}"\.\Managed_Object.h"\
+ {$(INCLUDE)}"\.\Managed_Object.i"\
+ {$(INCLUDE)}"\.\Map_Manager.cpp"\
+ {$(INCLUDE)}"\.\Map_Manager.h"\
+ {$(INCLUDE)}"\.\Map_Manager.i"\
+ {$(INCLUDE)}"\.\Mem_Map.h"\
+ {$(INCLUDE)}"\.\Mem_Map.i"\
+ {$(INCLUDE)}"\.\Memory_Pool.h"\
+ {$(INCLUDE)}"\.\Memory_Pool.i"\
+ {$(INCLUDE)}"\.\Object_Manager.h"\
+ {$(INCLUDE)}"\.\Object_Manager.i"\
+ {$(INCLUDE)}"\.\OS.h"\
+ {$(INCLUDE)}"\.\OS.i"\
+ {$(INCLUDE)}"\.\Pipe.h"\
+ {$(INCLUDE)}"\.\Pipe.i"\
+ {$(INCLUDE)}"\.\Priority_Reactor.h"\
+ {$(INCLUDE)}"\.\Priority_Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor.h"\
+ {$(INCLUDE)}"\.\Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor_Impl.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.i"\
+ {$(INCLUDE)}"\.\Service_Config.h"\
+ {$(INCLUDE)}"\.\Service_Config.i"\
+ {$(INCLUDE)}"\.\Service_Object.h"\
+ {$(INCLUDE)}"\.\Service_Object.i"\
+ {$(INCLUDE)}"\.\Shared_Object.h"\
+ {$(INCLUDE)}"\.\Shared_Object.i"\
+ {$(INCLUDE)}"\.\Signal.h"\
+ {$(INCLUDE)}"\.\Signal.i"\
+ {$(INCLUDE)}"\.\SString.h"\
+ {$(INCLUDE)}"\.\SString.i"\
+ {$(INCLUDE)}"\.\stdcpp.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\.\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\.\Synch.h"\
+ {$(INCLUDE)}"\.\Synch.i"\
+ {$(INCLUDE)}"\.\Synch_Options.h"\
+ {$(INCLUDE)}"\.\Synch_T.cpp"\
+ {$(INCLUDE)}"\.\Synch_T.h"\
+ {$(INCLUDE)}"\.\Synch_T.i"\
+ {$(INCLUDE)}"\.\Thread.h"\
+ {$(INCLUDE)}"\.\Thread.i"\
+ {$(INCLUDE)}"\.\Timer_Queue.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\.\Token.h"\
+ {$(INCLUDE)}"\.\Token.i"\
+ {$(INCLUDE)}"\.\Trace.h"\
+ {$(INCLUDE)}"\.\ws2tcpip.h"\
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "ACE static library - Win32 Unicode Debug"
+
+DEP_CPP_PRIOR=\
+ {$(INCLUDE)}"\.\ACE.h"\
+ {$(INCLUDE)}"\.\ACE.i"\
+ {$(INCLUDE)}"\.\Atomic_Op.i"\
+ {$(INCLUDE)}"\.\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\.\Auto_Ptr.h"\
+ {$(INCLUDE)}"\.\Auto_Ptr.i"\
+ {$(INCLUDE)}"\.\config-win32-common.h"\
+ {$(INCLUDE)}"\.\config-win32.h"\
+ {$(INCLUDE)}"\.\config.h"\
+ {$(INCLUDE)}"\.\Containers.cpp"\
+ {$(INCLUDE)}"\.\Containers.h"\
+ {$(INCLUDE)}"\.\Containers.i"\
+ {$(INCLUDE)}"\.\Event_Handler.h"\
+ {$(INCLUDE)}"\.\Event_Handler.i"\
+ {$(INCLUDE)}"\.\Free_List.cpp"\
+ {$(INCLUDE)}"\.\Free_List.h"\
+ {$(INCLUDE)}"\.\Free_List.i"\
+ {$(INCLUDE)}"\.\Handle_Set.h"\
+ {$(INCLUDE)}"\.\Handle_Set.i"\
+ {$(INCLUDE)}"\.\Local_Tokens.h"\
+ {$(INCLUDE)}"\.\Local_Tokens.i"\
+ {$(INCLUDE)}"\.\Log_Msg.h"\
+ {$(INCLUDE)}"\.\Log_Priority.h"\
+ {$(INCLUDE)}"\.\Log_Record.h"\
+ {$(INCLUDE)}"\.\Log_Record.i"\
+ {$(INCLUDE)}"\.\Malloc.h"\
+ {$(INCLUDE)}"\.\Malloc.i"\
+ {$(INCLUDE)}"\.\Malloc_T.cpp"\
+ {$(INCLUDE)}"\.\Malloc_T.h"\
+ {$(INCLUDE)}"\.\Malloc_T.i"\
+ {$(INCLUDE)}"\.\Managed_Object.cpp"\
+ {$(INCLUDE)}"\.\Managed_Object.h"\
+ {$(INCLUDE)}"\.\Managed_Object.i"\
+ {$(INCLUDE)}"\.\Map_Manager.cpp"\
+ {$(INCLUDE)}"\.\Map_Manager.h"\
+ {$(INCLUDE)}"\.\Map_Manager.i"\
+ {$(INCLUDE)}"\.\Mem_Map.h"\
+ {$(INCLUDE)}"\.\Mem_Map.i"\
+ {$(INCLUDE)}"\.\Memory_Pool.h"\
+ {$(INCLUDE)}"\.\Memory_Pool.i"\
+ {$(INCLUDE)}"\.\Object_Manager.h"\
+ {$(INCLUDE)}"\.\Object_Manager.i"\
+ {$(INCLUDE)}"\.\OS.h"\
+ {$(INCLUDE)}"\.\OS.i"\
+ {$(INCLUDE)}"\.\Pipe.h"\
+ {$(INCLUDE)}"\.\Pipe.i"\
+ {$(INCLUDE)}"\.\Priority_Reactor.h"\
+ {$(INCLUDE)}"\.\Priority_Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor.h"\
+ {$(INCLUDE)}"\.\Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor_Impl.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.i"\
+ {$(INCLUDE)}"\.\Service_Config.h"\
+ {$(INCLUDE)}"\.\Service_Config.i"\
+ {$(INCLUDE)}"\.\Service_Object.h"\
+ {$(INCLUDE)}"\.\Service_Object.i"\
+ {$(INCLUDE)}"\.\Shared_Object.h"\
+ {$(INCLUDE)}"\.\Shared_Object.i"\
+ {$(INCLUDE)}"\.\Signal.h"\
+ {$(INCLUDE)}"\.\Signal.i"\
+ {$(INCLUDE)}"\.\SString.h"\
+ {$(INCLUDE)}"\.\SString.i"\
+ {$(INCLUDE)}"\.\stdcpp.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\.\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\.\Synch.h"\
+ {$(INCLUDE)}"\.\Synch.i"\
+ {$(INCLUDE)}"\.\Synch_Options.h"\
+ {$(INCLUDE)}"\.\Synch_T.cpp"\
+ {$(INCLUDE)}"\.\Synch_T.h"\
+ {$(INCLUDE)}"\.\Synch_T.i"\
+ {$(INCLUDE)}"\.\Thread.h"\
+ {$(INCLUDE)}"\.\Thread.i"\
+ {$(INCLUDE)}"\.\Timer_Queue.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\.\Token.h"\
+ {$(INCLUDE)}"\.\Token.i"\
+ {$(INCLUDE)}"\.\Trace.h"\
+ {$(INCLUDE)}"\.\ws2tcpip.h"\
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "ACE static library - Win32 Unicode Release"
+
+DEP_CPP_PRIOR=\
+ {$(INCLUDE)}"\.\ACE.h"\
+ {$(INCLUDE)}"\.\ACE.i"\
+ {$(INCLUDE)}"\.\Atomic_Op.i"\
+ {$(INCLUDE)}"\.\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\.\Auto_Ptr.h"\
+ {$(INCLUDE)}"\.\Auto_Ptr.i"\
+ {$(INCLUDE)}"\.\config-win32-common.h"\
+ {$(INCLUDE)}"\.\config-win32.h"\
+ {$(INCLUDE)}"\.\config.h"\
+ {$(INCLUDE)}"\.\Containers.cpp"\
+ {$(INCLUDE)}"\.\Containers.h"\
+ {$(INCLUDE)}"\.\Containers.i"\
+ {$(INCLUDE)}"\.\Event_Handler.h"\
+ {$(INCLUDE)}"\.\Event_Handler.i"\
+ {$(INCLUDE)}"\.\Free_List.cpp"\
+ {$(INCLUDE)}"\.\Free_List.h"\
+ {$(INCLUDE)}"\.\Free_List.i"\
+ {$(INCLUDE)}"\.\Handle_Set.h"\
+ {$(INCLUDE)}"\.\Handle_Set.i"\
+ {$(INCLUDE)}"\.\Local_Tokens.h"\
+ {$(INCLUDE)}"\.\Local_Tokens.i"\
+ {$(INCLUDE)}"\.\Log_Msg.h"\
+ {$(INCLUDE)}"\.\Log_Priority.h"\
+ {$(INCLUDE)}"\.\Log_Record.h"\
+ {$(INCLUDE)}"\.\Log_Record.i"\
+ {$(INCLUDE)}"\.\Malloc.h"\
+ {$(INCLUDE)}"\.\Malloc.i"\
+ {$(INCLUDE)}"\.\Malloc_T.cpp"\
+ {$(INCLUDE)}"\.\Malloc_T.h"\
+ {$(INCLUDE)}"\.\Malloc_T.i"\
+ {$(INCLUDE)}"\.\Managed_Object.cpp"\
+ {$(INCLUDE)}"\.\Managed_Object.h"\
+ {$(INCLUDE)}"\.\Managed_Object.i"\
+ {$(INCLUDE)}"\.\Map_Manager.cpp"\
+ {$(INCLUDE)}"\.\Map_Manager.h"\
+ {$(INCLUDE)}"\.\Map_Manager.i"\
+ {$(INCLUDE)}"\.\Mem_Map.h"\
+ {$(INCLUDE)}"\.\Mem_Map.i"\
+ {$(INCLUDE)}"\.\Memory_Pool.h"\
+ {$(INCLUDE)}"\.\Memory_Pool.i"\
+ {$(INCLUDE)}"\.\Object_Manager.h"\
+ {$(INCLUDE)}"\.\Object_Manager.i"\
+ {$(INCLUDE)}"\.\OS.h"\
+ {$(INCLUDE)}"\.\OS.i"\
+ {$(INCLUDE)}"\.\Pipe.h"\
+ {$(INCLUDE)}"\.\Pipe.i"\
+ {$(INCLUDE)}"\.\Priority_Reactor.h"\
+ {$(INCLUDE)}"\.\Priority_Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor.h"\
+ {$(INCLUDE)}"\.\Reactor.i"\
+ {$(INCLUDE)}"\.\Reactor_Impl.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.h"\
+ {$(INCLUDE)}"\.\Select_Reactor.i"\
+ {$(INCLUDE)}"\.\Service_Config.h"\
+ {$(INCLUDE)}"\.\Service_Config.i"\
+ {$(INCLUDE)}"\.\Service_Object.h"\
+ {$(INCLUDE)}"\.\Service_Object.i"\
+ {$(INCLUDE)}"\.\Shared_Object.h"\
+ {$(INCLUDE)}"\.\Shared_Object.i"\
+ {$(INCLUDE)}"\.\Signal.h"\
+ {$(INCLUDE)}"\.\Signal.i"\
+ {$(INCLUDE)}"\.\SString.h"\
+ {$(INCLUDE)}"\.\SString.i"\
+ {$(INCLUDE)}"\.\stdcpp.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\.\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\.\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\.\Synch.h"\
+ {$(INCLUDE)}"\.\Synch.i"\
+ {$(INCLUDE)}"\.\Synch_Options.h"\
+ {$(INCLUDE)}"\.\Synch_T.cpp"\
+ {$(INCLUDE)}"\.\Synch_T.h"\
+ {$(INCLUDE)}"\.\Synch_T.i"\
+ {$(INCLUDE)}"\.\Thread.h"\
+ {$(INCLUDE)}"\.\Thread.i"\
+ {$(INCLUDE)}"\.\Timer_Queue.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\.\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\.\Token.h"\
+ {$(INCLUDE)}"\.\Token.i"\
+ {$(INCLUDE)}"\.\Trace.h"\
+ {$(INCLUDE)}"\.\ws2tcpip.h"\
+
+
+"$(INTDIR)\Priority_Reactor.obj" : $(SOURCE) $(DEP_CPP_PRIOR) "$(INTDIR)"
+
+
+!ENDIF
+
+# End Source File
# End Target
# End Project
################################################################################
diff --git a/ace/ACE_Library.mdp b/ace/ACE_Library.mdp
index c7b81ad872b..51e0799f77c 100644
--- a/ace/ACE_Library.mdp
+++ b/ace/ACE_Library.mdp
Binary files differ
diff --git a/ace/Atomic_Op.i b/ace/Atomic_Op.i
index 323de27e2c8..06c6b3f4611 100644
--- a/ace/Atomic_Op.i
+++ b/ace/Atomic_Op.i
@@ -115,6 +115,14 @@ ACE_Atomic_Op<ACE_LOCK, TYPE>::operator TYPE () const
return this->value_;
}
+template <class ACE_LOCK, class TYPE> ACE_INLINE TYPE
+ACE_Atomic_Op<ACE_LOCK, TYPE>::value (void) const
+{
+// ACE_TRACE ("ACE_Atomic_Op<ACE_LOCK, TYPE>::value");
+ ACE_Guard<ACE_LOCK> m ((ACE_LOCK &) this->lock_);
+ return this->value_;
+}
+
template <class ACE_LOCK, class TYPE> ACE_INLINE void
ACE_Atomic_Op<ACE_LOCK, TYPE>::operator= (const TYPE &i)
{
diff --git a/ace/Svc_Handler.cpp b/ace/Svc_Handler.cpp
index ee4113600f9..2811ad35b98 100644
--- a/ace/Svc_Handler.cpp
+++ b/ace/Svc_Handler.cpp
@@ -179,8 +179,7 @@ ACE_Svc_Handler<PR_ST_2, ACE_SYNCH_2>::shutdown (void)
// Deregister this handler with the ACE_Reactor.
if (this->reactor ())
{
- ACE_Reactor_Mask mask = ACE_Event_Handler::WRITE_MASK |
- ACE_Event_Handler::READ_MASK |
+ ACE_Reactor_Mask mask = ACE_Event_Handler::ALL_EVENTS_MASK |
ACE_Event_Handler::DONT_CALL;
// Make sure there are no timers.
diff --git a/ace/Synch_T.h b/ace/Synch_T.h
index a00bad885cd..705f167a98a 100644
--- a/ace/Synch_T.h
+++ b/ace/Synch_T.h
@@ -193,6 +193,9 @@ public:
operator TYPE () const;
// Atomically return <count_>.
+ TYPE value (void) const;
+ // Explicitly return <count_>.
+
void dump (void) const;
// Dump the state of an object.
diff --git a/tests/Notify_Performance_Test.cpp b/tests/Notify_Performance_Test.cpp
new file mode 100644
index 00000000000..243e7767eec
--- /dev/null
+++ b/tests/Notify_Performance_Test.cpp
@@ -0,0 +1,228 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// tests
+//
+// = FILENAME
+// Notify_Performance_Test.cpp
+//
+// = DESCRIPTION
+//
+// This test is used to time the notification mechanisms of the
+// ACE_Reactors. Both the WFMO_Reactor and Select_Reactor can be
+// tested. The notify() mechanism can also be tested with or
+// without data.
+//
+// = AUTHOR
+// Irfan Pyarali
+//
+// ============================================================================
+
+#include "test_config.h"
+#include "ace/Profile_Timer.h"
+#include "ace/Get_Opt.h"
+#include "ace/Reactor.h"
+#include "ace/WFMO_Reactor.h"
+#include "ace/Select_Reactor.h"
+#include "ace/Auto_Ptr.h"
+#include "ace/Synch.h"
+
+#if defined (ACE_HAS_THREADS)
+
+// Number of client (user) threads
+static long opt_nthreads = 1;
+
+// Number of notify calls
+static int opt_nloops = 20000;
+
+// Use the WFMO_Reactor
+static int opt_wfmo_reactor = 0;
+
+// Use the Select_Reactor
+static int opt_select_reactor = 0;
+
+// Pass data through the notify call
+static int opt_pass_notify_data = 0;
+
+// Simple no-op handler
+class Handler : public ACE_Event_Handler
+{
+public:
+ virtual int handle_exception (ACE_HANDLE fd = ACE_INVALID_HANDLE);
+ // The Handler callbacks.
+};
+
+int
+Handler::handle_exception (ACE_HANDLE handle)
+{
+ return 0;
+}
+
+// Execute the client tests.
+void *
+client (void *arg)
+{
+ // Number of client (user) threads
+ static ACE_Atomic_Op<ACE_Thread_Mutex, long> thread_counter = opt_nthreads;
+
+ // To pass or not to pass is the question
+ Handler *handler = 0;
+ if (!opt_pass_notify_data)
+ handler = 0;
+ else
+ handler = (Handler *) arg;
+
+ for (int i = 0; i < opt_nloops; i++)
+ ACE_Reactor::instance ()->notify (handler);
+
+ if (--thread_counter == 0)
+ ACE_Reactor::end_event_loop ();
+
+ return 0;
+}
+
+#endif /* ACE_HAS_THREADS */
+
+// Sets up the correct reactor (based on platform and options)
+void
+create_reactor (void)
+{
+ ACE_Reactor_Impl *impl = 0;
+
+ if (opt_wfmo_reactor)
+ {
+#if defined (ACE_WIN32)
+ ACE_NEW (impl, ACE_WFMO_Reactor);
+#endif /* ACE_WIN32 */
+ }
+ else if (opt_select_reactor)
+ {
+ ACE_NEW (impl, ACE_Select_Reactor);
+ }
+ ACE_Reactor *reactor = 0;
+ ACE_NEW (reactor, ACE_Reactor (impl));
+ ACE_Reactor::instance (reactor);
+}
+
+void
+print_results (ACE_Profile_Timer::ACE_Elapsed_Time &et)
+{
+ char *reactor_type = 0;
+ if (opt_wfmo_reactor)
+ reactor_type = "WFMO_Reactor";
+ else if (opt_select_reactor)
+ reactor_type = "Select_Reactor";
+ else
+ reactor_type = "Platform's default Reactor";
+
+ ACE_DEBUG ((LM_DEBUG, "\nNotify_Performance Test statistics:\n\n"));
+ ACE_DEBUG ((LM_DEBUG, "\tReactor Type: %s\n", reactor_type));
+ ACE_DEBUG ((LM_DEBUG, "\tWorker threads (calling notify()): %d\n", opt_nthreads));
+ ACE_DEBUG ((LM_DEBUG, "\tIteration per thread: %d\n", opt_nloops));
+ if (opt_pass_notify_data)
+ ACE_DEBUG ((LM_DEBUG, "\tData was passed in the notify() call\n"));
+ else
+ ACE_DEBUG ((LM_DEBUG, "\tNo data was passed in the notify() call\n"));
+
+ ACE_DEBUG ((LM_DEBUG, "\n\tTiming results notify() call:\n"));
+ ACE_DEBUG ((LM_DEBUG,
+ "\t\treal time = %f secs \n\t\tuser time = %f secs \n\t\tsystem time = %f secs\n\n",
+ et.real_time,
+ et.user_time,
+ et.system_time));
+}
+
+int
+main (int argc, char *argv[])
+{
+ ACE_START_TEST ("Notify_Performance_Test");
+
+#if defined (ACE_HAS_THREADS)
+
+ ACE_Get_Opt getopt (argc, argv, "swdc:l:", 1);
+ for (int c; (c = getopt ()) != -1; )
+ switch (c)
+ {
+ case 's':
+ opt_select_reactor = 1;
+ break;
+ case 'w':
+ opt_wfmo_reactor = 1;
+ break;
+ case 'c':
+ opt_nthreads = atoi (getopt.optarg);
+ break;
+ case 'l':
+ opt_nloops = atoi (getopt.optarg);
+ break;
+ case 'd':
+ opt_pass_notify_data = 1;
+ break;
+ }
+
+ // Sets up the correct reactor (based on platform and options)
+ create_reactor ();
+
+ // Manage memory automagically.
+ auto_ptr<ACE_Reactor> reactor (ACE_Reactor::instance ());
+ auto_ptr<ACE_Reactor_Impl> impl;
+
+ // If we are using other that the default implementation, we must
+ // clean up.
+ if (opt_select_reactor || opt_wfmo_reactor)
+ impl = ACE_Reactor::instance ()->implementation ();
+
+ // Callback object
+ Handler handler;
+
+ // Spawn worker threads
+ if (ACE_Thread_Manager::instance ()->spawn_n
+ (opt_nthreads,
+ ACE_THR_FUNC (client),
+ (void *) &handler,
+ THR_NEW_LWP | THR_DETACHED) == -1)
+ ACE_ERROR ((LM_ERROR, "(%P|%t) %p\n%a", "thread create failed"));
+
+ // Timer business
+ ACE_Profile_Timer timer;
+ timer.start ();
+
+ // Run event loop
+ ACE_Reactor::instance()->run_event_loop ();
+
+ timer.stop ();
+
+ ACE_Profile_Timer::ACE_Elapsed_Time et;
+ timer.elapsed_time (et);
+
+ // Print results
+ print_results (et);
+
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) waiting for the worker threads...\n"));
+
+ // Wait for all worker to get done.
+ ACE_Thread_Manager::instance ()->wait ();
+
+#else
+ ACE_ERROR ((LM_ERROR, "threads not supported on this platform\n"));
+#endif /* ACE_HAS_THREADS */
+
+ ACE_END_TEST;
+ return 0;
+}
+
+#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
+template class auto_ptr<ACE_Reactor>;
+template class ACE_Auto_Basic_Ptr<ACE_Reactor>;
+template class auto_ptr<ACE_Reactor_Impl>;
+template class ACE_Auto_Basic_Ptr<ACE_Reactor_Impl>;
+template class ACE_Atomic_Op<ACE_Thread_Mutex, long>;
+#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
+#pragma instantiate auto_ptr<ACE_Reactor>
+#pragma instantiate ACE_Auto_Basic_Ptr<ACE_Reactor>
+#pragma instantiate auto_ptr<ACE_Reactor_Impl>
+#pragma instantiate ACE_Auto_Basic_Ptr<ACE_Reactor_Impl>
+#pragma instantiate ACE_Atomic_Op<ACE_Thread_Mutex, long>
+#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
diff --git a/tests/Reactor_Performance_Test.cpp b/tests/Reactor_Performance_Test.cpp
new file mode 100644
index 00000000000..3b42420436a
--- /dev/null
+++ b/tests/Reactor_Performance_Test.cpp
@@ -0,0 +1,374 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// tests
+//
+// = FILENAME
+// Reactor_Performance_Test.cpp
+//
+// = DESCRIPTION
+//
+// This test is used to time the dispatching mechanisms of the
+// ACE_Reactors. Both the WFMO_Reactor and Select_Reactor can be
+// tested.
+//
+// = AUTHOR
+// Irfan Pyarali
+//
+// ============================================================================
+
+#include "test_config.h"
+#include "ace/Profile_Timer.h"
+#include "ace/Get_Opt.h"
+#include "ace/SOCK_Connector.h"
+#include "ace/SOCK_Acceptor.h"
+#include "ace/Acceptor.h"
+#include "ace/Connector.h"
+#include "ace/Reactor.h"
+#include "ace/WFMO_Reactor.h"
+#include "ace/Select_Reactor.h"
+#include "ace/Auto_Ptr.h"
+
+#if defined (ACE_HAS_THREADS)
+
+// Number of client (user) threads
+static int opt_nconnections = 20;
+
+// Number of data exchanges
+static int opt_nloops = 200;
+
+// Use the WFMO_Reactor
+static int opt_wfmo_reactor = 0;
+
+// Use the Select_Reactor
+static int opt_select_reactor = 0;
+
+// Simple class for reading in the data
+class Read_Handler : public ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_SYNCH>
+{
+public:
+ static void set_countdown (int nconnections);
+
+ virtual int open (void *);
+ virtual int handle_input (ACE_HANDLE h);
+ virtual int handle_close (ACE_HANDLE handle,
+ ACE_Reactor_Mask close_mask);
+ // The Svc_Handler callbacks.
+
+private:
+ static int waiting_;
+ // How many connections are we waiting for.
+};
+
+int Read_Handler::waiting_ = 0;
+
+void
+Read_Handler::set_countdown (int nconnections)
+{
+ Read_Handler::waiting_ = nconnections;
+}
+
+// Initialize the Svc_Handler
+int
+Read_Handler::open (void *)
+{
+ if (this->peer ().enable (ACE_NONBLOCK) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%t) Read_Handler::open, cannot set non blocking mode\n"), -1);
+
+ if (reactor ()->register_handler (this, READ_MASK | CLOSE_MASK) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%t) Read_Handler::open, cannot register handler\n"), -1);
+
+ ACE_DEBUG ((LM_DEBUG, "(%t) created svc_handler for handle %d\n", get_handle ()));
+ return 0;
+}
+
+// Handle incoming data
+int
+Read_Handler::handle_input (ACE_HANDLE h)
+{
+ char buf[BUFSIZ];
+
+ ssize_t result = this->peer ().recv (buf, sizeof (buf));
+ if (result <= 0)
+ {
+ if (result < 0 && errno == EWOULDBLOCK)
+ return 0;
+
+ if (result != 0)
+ ACE_DEBUG ((LM_DEBUG, "(%t) %p\n", "Read_Handler::handle_input"));
+
+ // This will cause handle_close to get called
+ return -1;
+ }
+
+ return 0;
+}
+
+// Handle connection shutdown
+int
+Read_Handler::handle_close (ACE_HANDLE handle,
+ ACE_Reactor_Mask close_mask)
+{
+ // Reduce count
+ waiting_--;
+
+ // If no connections are open
+ if (waiting_ == 0)
+ {
+ ACE_Reactor::instance ()->end_event_loop ();
+ }
+
+ ACE_DEBUG ((LM_DEBUG,
+ "(%t) Read_Handler::handle_close closing down\n"));
+
+ // Shutdown
+ this->destroy ();
+ return 0;
+}
+
+// This Svc_Handler simply connects to a server and sends some output
+// to it. Its purpose is to feed the test.
+class Write_Handler : public ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_SYNCH>
+{
+public:
+ virtual int open (void *);
+ virtual int send_data (void);
+};
+
+int
+Write_Handler::open (void *)
+{
+ return 0;
+}
+
+int
+Write_Handler::send_data (void)
+{
+ int send_size = sizeof (ACE_ALPHABET) - 1;
+
+ if (this->peer ().send_n (ACE_ALPHABET, send_size) != send_size)
+ ACE_ERROR_RETURN ((LM_ERROR, "(%t) %p\n", "send_n"), -1);
+
+ return 0;
+}
+
+// Connection factories
+typedef ACE_Connector<Write_Handler, ACE_SOCK_CONNECTOR> CONNECTOR;
+typedef ACE_Acceptor<Read_Handler, ACE_SOCK_ACCEPTOR> ACCEPTOR;
+
+// Execute the client tests.
+void *
+client (void *arg)
+{
+ ACE_DEBUG ((LM_DEBUG, "(%t) running client\n"));
+
+ ACE_INET_Addr *connection_addr = (ACE_INET_Addr*) arg;
+ CONNECTOR connector;
+
+ int i;
+
+ // Automagic memory cleanup
+ ACE_Auto_Basic_Array_Ptr <Write_Handler *> writers;
+ Write_Handler **temp_writers;
+ ACE_NEW_RETURN (temp_writers, Write_Handler *[opt_nconnections], 0);
+ writers = temp_writers;
+
+ // Automagic memory cleanup
+ ACE_Auto_Array_Ptr <ACE_INET_Addr> addresses;
+ ACE_INET_Addr *temp_addresses;
+ ACE_NEW_RETURN (temp_addresses, ACE_INET_Addr [opt_nconnections], 0);
+ addresses = temp_addresses;
+
+ // Initialize array
+ for (i = 0; i < opt_nconnections; i++)
+ {
+ writers[i] = 0;
+ addresses[i] = *connection_addr;
+ }
+
+ // Connection all <opt_nconnections> svc_handlers
+ int result = connector.connect_n (opt_nconnections,
+ writers.get (),
+ addresses.get ());
+ if (result == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "(%t) %p\n", "connects failed"), 0);
+
+ // Iterate to send data
+ for (int j = 0; j < opt_nloops; j++)
+ for (i = 0; i < opt_nconnections; i++)
+ if (writers[i]->send_data () == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "(%t) %p\n", "writer::send_data"), 0);
+
+ // Cleanup
+ for (i = 0; i < opt_nconnections; i++)
+ writers[i]->destroy ();
+
+ ACE_DEBUG ((LM_DEBUG, "(%t) finishing client\n"));
+ return 0;
+}
+
+// Sets up the correct reactor (based on platform and options)
+void
+create_reactor (void)
+{
+ ACE_Reactor_Impl *impl = 0;
+
+ if (opt_wfmo_reactor)
+ {
+#if defined (ACE_WIN32)
+ ACE_NEW (impl, ACE_WFMO_Reactor);
+#endif /* ACE_WIN32 */
+ }
+ else if (opt_select_reactor)
+ {
+ ACE_NEW (impl, ACE_Select_Reactor);
+ }
+ ACE_Reactor *reactor = 0;
+ ACE_NEW (reactor, ACE_Reactor (impl));
+ ACE_Reactor::instance (reactor);
+}
+
+// Print stats
+void
+print_results (ACE_Profile_Timer::ACE_Elapsed_Time &et)
+{
+ char *reactor_type = 0;
+ if (opt_wfmo_reactor)
+ reactor_type = "WFMO_Reactor";
+ else if (opt_select_reactor)
+ reactor_type = "Select_Reactor";
+ else
+ reactor_type = "Platform's default Reactor";
+
+ ACE_DEBUG ((LM_DEBUG, "\n\tReactor_Performance Test statistics:\n\n"));
+ ACE_DEBUG ((LM_DEBUG, "\tReactor Type: %s\n", reactor_type));
+ ACE_DEBUG ((LM_DEBUG, "\tConnections: %d\n", opt_nconnections));
+ ACE_DEBUG ((LM_DEBUG, "\tIteration per connection: %d\n", opt_nloops));
+
+ ACE_DEBUG ((LM_DEBUG, "\n\tTiming results:\n"));
+ ACE_DEBUG ((LM_DEBUG,
+ "\t\treal time = %f secs \n\t\tuser time = %f secs \n\t\tsystem time = %f secs\n\n",
+ et.real_time,
+ et.user_time,
+ et.system_time));
+}
+
+#endif /* ACE_HAS_THREADS */
+
+int
+main (int argc, char *argv[])
+{
+ ACE_START_TEST ("Reactor_Performance_Test");
+
+#if defined (ACE_HAS_THREADS)
+
+ ACE_Get_Opt getopt (argc, argv, "swc:l:", 1);
+ for (int c; (c = getopt ()) != -1; )
+ switch (c)
+ {
+ case 's':
+ opt_select_reactor = 1;
+ break;
+ case 'w':
+ opt_wfmo_reactor = 1;
+ break;
+ case 'c':
+ opt_nconnections = atoi (getopt.optarg);
+ break;
+ case 'l':
+ opt_nloops = atoi (getopt.optarg);
+ break;
+ }
+
+ // Sets up the correct reactor (based on platform and options)
+ create_reactor ();
+
+ // Manage memory automagically.
+ auto_ptr<ACE_Reactor> reactor (ACE_Reactor::instance ());
+ auto_ptr<ACE_Reactor_Impl> impl;
+
+ // If we are using other that the default implementation, we must
+ // clean up.
+ if (opt_select_reactor || opt_wfmo_reactor)
+ impl = ACE_Reactor::instance ()->implementation ();
+
+ Read_Handler::set_countdown (opt_nconnections);
+
+ // Acceptor
+ ACCEPTOR acceptor;
+ ACE_INET_Addr server_addr;
+
+ // Bind acceptor to any port and then find out what the port was.
+ if (acceptor.open ((const ACE_INET_Addr &) ACE_Addr::sap_any) == -1
+ || acceptor.acceptor ().get_local_addr (server_addr) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "(%t) %p\n", "open"), -1);
+
+ ACE_DEBUG ((LM_DEBUG, "(%t) starting server at port %d\n",
+ server_addr.get_port_number ()));
+
+ ACE_INET_Addr connection_addr (server_addr.get_port_number (), "localhost");
+
+ if (ACE_Thread_Manager::instance ()->spawn
+ (ACE_THR_FUNC (client),
+ (void *) &connection_addr,
+ THR_NEW_LWP | THR_DETACHED) == -1)
+ ACE_ERROR ((LM_ERROR, "(%t) %p\n", "thread create failed"));
+
+ ACE_Profile_Timer timer;
+ timer.start ();
+ ACE_Reactor::instance()->run_event_loop ();
+ timer.stop ();
+
+ ACE_Profile_Timer::ACE_Elapsed_Time et;
+ timer.elapsed_time (et);
+
+ // Print results
+ print_results (et);
+
+ ACE_DEBUG ((LM_DEBUG, "(%t) waiting for the client thread...\n"));
+
+ ACE_Thread_Manager::instance ()->wait ();
+
+#else
+ ACE_ERROR ((LM_ERROR, "threads not supported on this platform\n"));
+#endif /* ACE_HAS_THREADS */
+
+ ACE_END_TEST;
+ return 0;
+}
+
+#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
+template class ACE_Connector<Write_Handler, ACE_SOCK_CONNECTOR>;
+template class ACE_Acceptor<Read_Handler, ACE_SOCK_ACCEPTOR>;
+template class ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_SYNCH>;
+template class auto_ptr<ACE_Reactor>;
+template class ACE_Auto_Basic_Ptr<ACE_Reactor>;
+template class auto_ptr<ACE_Reactor_Impl>;
+template class ACE_Auto_Basic_Ptr<ACE_Reactor_Impl>;
+template class ACE_Map_Manager<int,ACE_Svc_Tuple<Write_Handler>*,ACE_SYNCH_RW_MUTEX>;
+template class ACE_Map_Iterator<int,ACE_Svc_Tuple<Write_Handler>*,ACE_SYNCH_RW_MUTEX>;
+template class ACE_Map_Entry<int,ACE_Svc_Tuple<Write_Handler>*>;
+template class ACE_Svc_Tuple<Write_Handler>;
+template class ACE_Auto_Basic_Array_Ptr <Write_Handler *>;
+template class ACE_Auto_Basic_Array_Ptr <ACE_INET_Addr>;
+template class ACE_Auto_Array_Ptr <ACE_INET_Addr>;
+#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
+#pragma instantiate ACE_Connector<Write_Handler, ACE_SOCK_CONNECTOR>
+#pragma instantiate ACE_Acceptor<Read_Handler, ACE_SOCK_ACCEPTOR>
+#pragma instantiate ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_SYNCH>
+#pragma instantiate auto_ptr<ACE_Reactor>
+#pragma instantiate ACE_Auto_Basic_Ptr<ACE_Reactor>
+#pragma instantiate auto_ptr<ACE_Reactor_Impl>
+#pragma instantiate ACE_Auto_Basic_Ptr<ACE_Reactor_Impl>
+#pragma instantiate ACE_Map_Manager<int,ACE_Svc_Tuple<Write_Handler>*,ACE_SYNCH_RW_MUTEX>
+#pragma instantiate ACE_Map_Iterator<int,ACE_Svc_Tuple<Write_Handler>*,ACE_SYNCH_RW_MUTEX>
+#pragma instantiate ACE_Map_Entry<int,ACE_Svc_Tuple<Write_Handler>*>
+#pragma instantiate ACE_Svc_Tuple<Write_Handler>
+#pragma instantiate ACE_Auto_Basic_Array_Ptr <Write_Handler *>
+#pragma instantiate ACE_Auto_Basic_Array_Ptr <ACE_INET_Addr>
+#pragma instantiate ACE_Auto_Array_Ptr <ACE_INET_Addr>
+#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
diff --git a/tests/tests.mak b/tests/tests.mak
index 3317edc6977..d142e8e2eb1 100644
--- a/tests/tests.mak
+++ b/tests/tests.mak
@@ -4,8 +4,8 @@
# TARGTYPE "Win32 (x86) Console Application" 0x0103
!IF "$(CFG)" == ""
-CFG=Priority_Reactor_Test - Win32 Debug
-!MESSAGE No configuration specified. Defaulting to Priority_Reactor_Test -\
+CFG=Notify_Performance_Test - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to Notify_Performance_Test -\
Win32 Debug.
!ENDIF
@@ -44,12 +44,14 @@ CFG=Priority_Reactor_Test - Win32 Debug
"Hash_Map_Manager_Test - Win32 Debug" && "$(CFG)" !=\
"Semaphore_Test - Win32 Debug" && "$(CFG)" != "Atomic_Op_Test - Win32 Debug" &&\
"$(CFG)" != "MT_SOCK_Test - Win32 Debug" && "$(CFG)" !=\
- "Priority_Reactor_Test - Win32 Debug"
+ "Priority_Reactor_Test - Win32 Debug" && "$(CFG)" !=\
+ "Reactor_Performance_Test - Win32 Debug" && "$(CFG)" !=\
+ "Notify_Performance_Test - Win32 Debug"
!MESSAGE Invalid configuration "$(CFG)" specified.
!MESSAGE You can specify a configuration when running NMAKE on this makefile
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
-!MESSAGE NMAKE /f "tests.mak" CFG="Priority_Reactor_Test - Win32 Debug"
+!MESSAGE NMAKE /f "tests.mak" CFG="Notify_Performance_Test - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
@@ -142,6 +144,10 @@ CFG=Priority_Reactor_Test - Win32 Debug
"Win32 (x86) Console Application")
!MESSAGE "Priority_Reactor_Test - Win32 Debug" (based on\
"Win32 (x86) Console Application")
+!MESSAGE "Reactor_Performance_Test - Win32 Debug" (based on\
+ "Win32 (x86) Console Application")
+!MESSAGE "Notify_Performance_Test - Win32 Debug" (based on\
+ "Win32 (x86) Console Application")
!MESSAGE
!ERROR An invalid configuration is specified.
!ENDIF
@@ -3028,6 +3034,129 @@ LINK32_OBJS= \
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
+!ELSEIF "$(CFG)" == "Reactor_Performance_Test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Reactor_Performance_Test\Debug"
+# PROP BASE Intermediate_Dir "Reactor_Performance_Test\Debug"
+# PROP BASE Target_Dir "Reactor_Performance_Test"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir "Reactor_Performance_Test"
+OUTDIR=.\.
+INTDIR=.\Debug
+
+ALL : "$(OUTDIR)\Reactor_Performance_Test.exe"
+
+CLEAN :
+ -@erase "$(INTDIR)\Reactor_Performance_Test.obj"
+ -@erase "$(INTDIR)\vc40.idb"
+ -@erase "$(INTDIR)\vc40.pdb"
+ -@erase "$(OUTDIR)\Reactor_Performance_Test.exe"
+ -@erase "$(OUTDIR)\Reactor_Performance_Test.ilk"
+ -@erase "$(OUTDIR)\Reactor_Performance_Test.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+"$(INTDIR)" :
+ if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
+
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE"\
+ /Fp"$(INTDIR)/Reactor_Performance_Test.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/"\
+ /c
+CPP_OBJS=.\Debug/
+CPP_SBRS=.\.
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/Reactor_Performance_Test.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+# ADD LINK32 aced.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+LINK32_FLAGS=aced.lib kernel32.lib user32.lib gdi32.lib winspool.lib\
+ comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\
+ odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes\
+ /pdb:"$(OUTDIR)/Reactor_Performance_Test.pdb" /debug /machine:I386\
+ /out:"$(OUTDIR)/Reactor_Performance_Test.exe"
+LINK32_OBJS= \
+ "$(INTDIR)\Reactor_Performance_Test.obj"
+
+"$(OUTDIR)\Reactor_Performance_Test.exe" : "$(OUTDIR)" $(DEF_FILE)\
+ $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "Notify_Performance_Test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Notify_Performance_Test\Debug"
+# PROP BASE Intermediate_Dir "Notify_Performance_Test\Debug"
+# PROP BASE Target_Dir "Notify_Performance_Test"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir "Notify_Performance_Test"
+OUTDIR=.
+INTDIR=.\Debug
+
+ALL : "$(OUTDIR)\Notify_Performance_Test.exe"
+
+CLEAN :
+ -@erase "$(INTDIR)\Notify_Performance_Test.obj"
+ -@erase "$(INTDIR)\vc40.idb"
+ -@erase "$(INTDIR)\vc40.pdb"
+ -@erase "$(OUTDIR)\Notify_Performance_Test.exe"
+ -@erase "$(OUTDIR)\Notify_Performance_Test.ilk"
+ -@erase "$(OUTDIR)\Notify_Performance_Test.pdb"
+
+"$(INTDIR)" :
+ if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
+
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE"\
+ /Fp"$(INTDIR)/Notify_Performance_Test.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/"\
+ /c
+CPP_OBJS=.\Debug/
+CPP_SBRS=.\.
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/Notify_Performance_Test.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+# ADD LINK32 aced.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
+LINK32_FLAGS=aced.lib kernel32.lib user32.lib gdi32.lib winspool.lib\
+ comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\
+ odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes\
+ /pdb:"$(OUTDIR)/Notify_Performance_Test.pdb" /debug /machine:I386\
+ /out:"$(OUTDIR)/Notify_Performance_Test.exe"
+LINK32_OBJS= \
+ "$(INTDIR)\Notify_Performance_Test.obj"
+
+"$(OUTDIR)\Notify_Performance_Test.exe" : "$(OUTDIR)" $(DEF_FILE)\
+ $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
!ENDIF
.c{$(CPP_OBJS)}.obj:
@@ -7124,9 +7253,6 @@ DEP_CPP_ATOMI=\
# Begin Source File
SOURCE=.\MT_SOCK_Test.cpp
-
-!IF "$(CFG)" == "MT_SOCK_Test - Win32 Debug"
-
DEP_CPP_MT_SO=\
{$(INCLUDE)}"\.\test_config.h"\
{$(INCLUDE)}"\ace\ACE.h"\
@@ -7210,8 +7336,6 @@ DEP_CPP_MT_SO=\
"$(INTDIR)\MT_SOCK_Test.obj" : $(SOURCE) $(DEP_CPP_MT_SO) "$(INTDIR)"
-!ENDIF
-
# End Source File
# End Target
################################################################################
@@ -7376,5 +7500,293 @@ DEP_CPP_PRIORIT=\
# End Source File
# End Target
+################################################################################
+# Begin Target
+
+# Name "Reactor_Performance_Test - Win32 Debug"
+################################################################################
+# Begin Source File
+
+SOURCE=.\Reactor_Performance_Test.cpp
+DEP_CPP_REACTOR_P=\
+ {$(INCLUDE)}"\.\test_config.h"\
+ {$(INCLUDE)}"\ace\Acceptor.cpp"\
+ {$(INCLUDE)}"\ace\Acceptor.h"\
+ {$(INCLUDE)}"\ace\Acceptor.i"\
+ {$(INCLUDE)}"\ace\ACE.h"\
+ {$(INCLUDE)}"\ace\ACE.i"\
+ {$(INCLUDE)}"\ace\Addr.h"\
+ {$(INCLUDE)}"\ace\Addr.i"\
+ {$(INCLUDE)}"\ace\Atomic_Op.i"\
+ {$(INCLUDE)}"\ace\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\ace\Auto_Ptr.h"\
+ {$(INCLUDE)}"\ace\Auto_Ptr.i"\
+ {$(INCLUDE)}"\ace\config-win32-common.h"\
+ {$(INCLUDE)}"\ace\config-win32.h"\
+ {$(INCLUDE)}"\ace\config.h"\
+ {$(INCLUDE)}"\ace\Connector.cpp"\
+ {$(INCLUDE)}"\ace\Connector.h"\
+ {$(INCLUDE)}"\ace\Connector.i"\
+ {$(INCLUDE)}"\ace\Containers.cpp"\
+ {$(INCLUDE)}"\ace\Containers.h"\
+ {$(INCLUDE)}"\ace\Containers.i"\
+ {$(INCLUDE)}"\ace\Dynamic.h"\
+ {$(INCLUDE)}"\ace\Dynamic.i"\
+ {$(INCLUDE)}"\ace\Event_Handler.h"\
+ {$(INCLUDE)}"\ace\Event_Handler.i"\
+ {$(INCLUDE)}"\ace\Free_List.cpp"\
+ {$(INCLUDE)}"\ace\Free_List.h"\
+ {$(INCLUDE)}"\ace\Free_List.i"\
+ {$(INCLUDE)}"\ace\Get_Opt.h"\
+ {$(INCLUDE)}"\ace\Get_Opt.i"\
+ {$(INCLUDE)}"\ace\Handle_Set.h"\
+ {$(INCLUDE)}"\ace\Handle_Set.i"\
+ {$(INCLUDE)}"\ace\Hash_Map_Manager.cpp"\
+ {$(INCLUDE)}"\ace\Hash_Map_Manager.h"\
+ {$(INCLUDE)}"\ace\High_Res_Timer.h"\
+ {$(INCLUDE)}"\ace\High_Res_Timer.i"\
+ {$(INCLUDE)}"\ace\INET_Addr.h"\
+ {$(INCLUDE)}"\ace\INET_Addr.i"\
+ {$(INCLUDE)}"\ace\IO_Cntl_Msg.h"\
+ {$(INCLUDE)}"\ace\IPC_SAP.h"\
+ {$(INCLUDE)}"\ace\IPC_SAP.i"\
+ {$(INCLUDE)}"\ace\Local_Tokens.h"\
+ {$(INCLUDE)}"\ace\Local_Tokens.i"\
+ {$(INCLUDE)}"\ace\Log_Msg.h"\
+ {$(INCLUDE)}"\ace\Log_Priority.h"\
+ {$(INCLUDE)}"\ace\Log_Record.h"\
+ {$(INCLUDE)}"\ace\Log_Record.i"\
+ {$(INCLUDE)}"\ace\Malloc.h"\
+ {$(INCLUDE)}"\ace\Malloc.i"\
+ {$(INCLUDE)}"\ace\Malloc_T.cpp"\
+ {$(INCLUDE)}"\ace\Malloc_T.h"\
+ {$(INCLUDE)}"\ace\Malloc_T.i"\
+ {$(INCLUDE)}"\ace\Managed_Object.cpp"\
+ {$(INCLUDE)}"\ace\Managed_Object.h"\
+ {$(INCLUDE)}"\ace\Managed_Object.i"\
+ {$(INCLUDE)}"\ace\Map_Manager.cpp"\
+ {$(INCLUDE)}"\ace\Map_Manager.h"\
+ {$(INCLUDE)}"\ace\Map_Manager.i"\
+ {$(INCLUDE)}"\ace\Mem_Map.h"\
+ {$(INCLUDE)}"\ace\Mem_Map.i"\
+ {$(INCLUDE)}"\ace\Memory_Pool.h"\
+ {$(INCLUDE)}"\ace\Memory_Pool.i"\
+ {$(INCLUDE)}"\ace\Message_Block.h"\
+ {$(INCLUDE)}"\ace\Message_Block.i"\
+ {$(INCLUDE)}"\ace\Message_Queue.cpp"\
+ {$(INCLUDE)}"\ace\Message_Queue.h"\
+ {$(INCLUDE)}"\ace\Message_Queue.i"\
+ {$(INCLUDE)}"\ace\Module.cpp"\
+ {$(INCLUDE)}"\ace\Module.h"\
+ {$(INCLUDE)}"\ace\Module.i"\
+ {$(INCLUDE)}"\ace\Object_Manager.h"\
+ {$(INCLUDE)}"\ace\Object_Manager.i"\
+ {$(INCLUDE)}"\ace\OS.h"\
+ {$(INCLUDE)}"\ace\OS.i"\
+ {$(INCLUDE)}"\ace\Pipe.h"\
+ {$(INCLUDE)}"\ace\Pipe.i"\
+ {$(INCLUDE)}"\ace\Profile_Timer.h"\
+ {$(INCLUDE)}"\ace\Profile_Timer.i"\
+ {$(INCLUDE)}"\ace\Reactor.h"\
+ {$(INCLUDE)}"\ace\Reactor.i"\
+ {$(INCLUDE)}"\ace\Reactor_Impl.h"\
+ {$(INCLUDE)}"\ace\Select_Reactor.h"\
+ {$(INCLUDE)}"\ace\Select_Reactor.i"\
+ {$(INCLUDE)}"\ace\Service_Config.h"\
+ {$(INCLUDE)}"\ace\Service_Config.i"\
+ {$(INCLUDE)}"\ace\Service_Object.h"\
+ {$(INCLUDE)}"\ace\Service_Object.i"\
+ {$(INCLUDE)}"\ace\Service_Types.h"\
+ {$(INCLUDE)}"\ace\Service_Types.i"\
+ {$(INCLUDE)}"\ace\Shared_Object.h"\
+ {$(INCLUDE)}"\ace\Shared_Object.i"\
+ {$(INCLUDE)}"\ace\Signal.h"\
+ {$(INCLUDE)}"\ace\Signal.i"\
+ {$(INCLUDE)}"\ace\SOCK.h"\
+ {$(INCLUDE)}"\ace\SOCK.i"\
+ {$(INCLUDE)}"\ace\SOCK_Acceptor.h"\
+ {$(INCLUDE)}"\ace\SOCK_Acceptor.i"\
+ {$(INCLUDE)}"\ace\SOCK_Connector.h"\
+ {$(INCLUDE)}"\ace\SOCK_Connector.i"\
+ {$(INCLUDE)}"\ace\SOCK_IO.h"\
+ {$(INCLUDE)}"\ace\SOCK_IO.i"\
+ {$(INCLUDE)}"\ace\SOCK_Stream.h"\
+ {$(INCLUDE)}"\ace\SOCK_Stream.i"\
+ {$(INCLUDE)}"\ace\SString.h"\
+ {$(INCLUDE)}"\ace\SString.i"\
+ {$(INCLUDE)}"\ace\stdcpp.h"\
+ {$(INCLUDE)}"\ace\Strategies.h"\
+ {$(INCLUDE)}"\ace\Strategies_T.cpp"\
+ {$(INCLUDE)}"\ace\Strategies_T.h"\
+ {$(INCLUDE)}"\ace\Stream_Modules.cpp"\
+ {$(INCLUDE)}"\ace\Stream_Modules.h"\
+ {$(INCLUDE)}"\ace\Stream_Modules.i"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\ace\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\ace\Svc_Handler.cpp"\
+ {$(INCLUDE)}"\ace\Svc_Handler.h"\
+ {$(INCLUDE)}"\ace\Svc_Handler.i"\
+ {$(INCLUDE)}"\ace\Synch.h"\
+ {$(INCLUDE)}"\ace\Synch.i"\
+ {$(INCLUDE)}"\ace\Synch_Options.h"\
+ {$(INCLUDE)}"\ace\Synch_T.cpp"\
+ {$(INCLUDE)}"\ace\Synch_T.h"\
+ {$(INCLUDE)}"\ace\Synch_T.i"\
+ {$(INCLUDE)}"\ace\Task.h"\
+ {$(INCLUDE)}"\ace\Task.i"\
+ {$(INCLUDE)}"\ace\Task_T.cpp"\
+ {$(INCLUDE)}"\ace\Task_T.h"\
+ {$(INCLUDE)}"\ace\Task_T.i"\
+ {$(INCLUDE)}"\ace\Thread.h"\
+ {$(INCLUDE)}"\ace\Thread.i"\
+ {$(INCLUDE)}"\ace\Thread_Manager.h"\
+ {$(INCLUDE)}"\ace\Thread_Manager.i"\
+ {$(INCLUDE)}"\ace\Time_Value.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\ace\Token.h"\
+ {$(INCLUDE)}"\ace\Token.i"\
+ {$(INCLUDE)}"\ace\Trace.h"\
+ {$(INCLUDE)}"\ace\WFMO_Reactor.h"\
+ {$(INCLUDE)}"\ace\WFMO_Reactor.i"\
+ {$(INCLUDE)}"\ace\ws2tcpip.h"\
+
+
+"$(INTDIR)\Reactor_Performance_Test.obj" : $(SOURCE) $(DEP_CPP_REACTOR_P)\
+ "$(INTDIR)"
+
+
+# End Source File
+# End Target
+################################################################################
+# Begin Target
+
+# Name "Notify_Performance_Test - Win32 Debug"
+################################################################################
+# Begin Source File
+
+SOURCE=.\Notify_Performance_Test.cpp
+DEP_CPP_NOTIF=\
+ {$(INCLUDE)}"\.\test_config.h"\
+ {$(INCLUDE)}"\ace\ACE.h"\
+ {$(INCLUDE)}"\ace\ACE.i"\
+ {$(INCLUDE)}"\ace\Atomic_Op.i"\
+ {$(INCLUDE)}"\ace\Auto_Ptr.cpp"\
+ {$(INCLUDE)}"\ace\Auto_Ptr.h"\
+ {$(INCLUDE)}"\ace\Auto_Ptr.i"\
+ {$(INCLUDE)}"\ace\config-win32-common.h"\
+ {$(INCLUDE)}"\ace\config-win32.h"\
+ {$(INCLUDE)}"\ace\config.h"\
+ {$(INCLUDE)}"\ace\Containers.cpp"\
+ {$(INCLUDE)}"\ace\Containers.h"\
+ {$(INCLUDE)}"\ace\Containers.i"\
+ {$(INCLUDE)}"\ace\Event_Handler.h"\
+ {$(INCLUDE)}"\ace\Event_Handler.i"\
+ {$(INCLUDE)}"\ace\Free_List.cpp"\
+ {$(INCLUDE)}"\ace\Free_List.h"\
+ {$(INCLUDE)}"\ace\Free_List.i"\
+ {$(INCLUDE)}"\ace\Get_Opt.h"\
+ {$(INCLUDE)}"\ace\Get_Opt.i"\
+ {$(INCLUDE)}"\ace\Handle_Set.h"\
+ {$(INCLUDE)}"\ace\Handle_Set.i"\
+ {$(INCLUDE)}"\ace\Hash_Map_Manager.cpp"\
+ {$(INCLUDE)}"\ace\Hash_Map_Manager.h"\
+ {$(INCLUDE)}"\ace\High_Res_Timer.h"\
+ {$(INCLUDE)}"\ace\High_Res_Timer.i"\
+ {$(INCLUDE)}"\ace\IO_Cntl_Msg.h"\
+ {$(INCLUDE)}"\ace\Local_Tokens.h"\
+ {$(INCLUDE)}"\ace\Local_Tokens.i"\
+ {$(INCLUDE)}"\ace\Log_Msg.h"\
+ {$(INCLUDE)}"\ace\Log_Priority.h"\
+ {$(INCLUDE)}"\ace\Log_Record.h"\
+ {$(INCLUDE)}"\ace\Log_Record.i"\
+ {$(INCLUDE)}"\ace\Malloc.h"\
+ {$(INCLUDE)}"\ace\Malloc.i"\
+ {$(INCLUDE)}"\ace\Malloc_T.cpp"\
+ {$(INCLUDE)}"\ace\Malloc_T.h"\
+ {$(INCLUDE)}"\ace\Malloc_T.i"\
+ {$(INCLUDE)}"\ace\Managed_Object.cpp"\
+ {$(INCLUDE)}"\ace\Managed_Object.h"\
+ {$(INCLUDE)}"\ace\Managed_Object.i"\
+ {$(INCLUDE)}"\ace\Map_Manager.cpp"\
+ {$(INCLUDE)}"\ace\Map_Manager.h"\
+ {$(INCLUDE)}"\ace\Map_Manager.i"\
+ {$(INCLUDE)}"\ace\Mem_Map.h"\
+ {$(INCLUDE)}"\ace\Mem_Map.i"\
+ {$(INCLUDE)}"\ace\Memory_Pool.h"\
+ {$(INCLUDE)}"\ace\Memory_Pool.i"\
+ {$(INCLUDE)}"\ace\Message_Block.h"\
+ {$(INCLUDE)}"\ace\Message_Block.i"\
+ {$(INCLUDE)}"\ace\Message_Queue.cpp"\
+ {$(INCLUDE)}"\ace\Message_Queue.h"\
+ {$(INCLUDE)}"\ace\Message_Queue.i"\
+ {$(INCLUDE)}"\ace\Object_Manager.h"\
+ {$(INCLUDE)}"\ace\Object_Manager.i"\
+ {$(INCLUDE)}"\ace\OS.h"\
+ {$(INCLUDE)}"\ace\OS.i"\
+ {$(INCLUDE)}"\ace\Pipe.h"\
+ {$(INCLUDE)}"\ace\Pipe.i"\
+ {$(INCLUDE)}"\ace\Profile_Timer.h"\
+ {$(INCLUDE)}"\ace\Profile_Timer.i"\
+ {$(INCLUDE)}"\ace\Reactor.h"\
+ {$(INCLUDE)}"\ace\Reactor.i"\
+ {$(INCLUDE)}"\ace\Reactor_Impl.h"\
+ {$(INCLUDE)}"\ace\Select_Reactor.h"\
+ {$(INCLUDE)}"\ace\Select_Reactor.i"\
+ {$(INCLUDE)}"\ace\Service_Config.h"\
+ {$(INCLUDE)}"\ace\Service_Config.i"\
+ {$(INCLUDE)}"\ace\Service_Object.h"\
+ {$(INCLUDE)}"\ace\Service_Object.i"\
+ {$(INCLUDE)}"\ace\Service_Types.h"\
+ {$(INCLUDE)}"\ace\Service_Types.i"\
+ {$(INCLUDE)}"\ace\Shared_Object.h"\
+ {$(INCLUDE)}"\ace\Shared_Object.i"\
+ {$(INCLUDE)}"\ace\Signal.h"\
+ {$(INCLUDE)}"\ace\Signal.i"\
+ {$(INCLUDE)}"\ace\SString.h"\
+ {$(INCLUDE)}"\ace\SString.i"\
+ {$(INCLUDE)}"\ace\stdcpp.h"\
+ {$(INCLUDE)}"\ace\Strategies.h"\
+ {$(INCLUDE)}"\ace\Strategies_T.cpp"\
+ {$(INCLUDE)}"\ace\Strategies_T.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Complex.i"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.h"\
+ {$(INCLUDE)}"\ace\SV_Semaphore_Simple.i"\
+ {$(INCLUDE)}"\ace\Svc_Conf_Tokens.h"\
+ {$(INCLUDE)}"\ace\Synch.h"\
+ {$(INCLUDE)}"\ace\Synch.i"\
+ {$(INCLUDE)}"\ace\Synch_Options.h"\
+ {$(INCLUDE)}"\ace\Synch_T.cpp"\
+ {$(INCLUDE)}"\ace\Synch_T.h"\
+ {$(INCLUDE)}"\ace\Synch_T.i"\
+ {$(INCLUDE)}"\ace\Thread.h"\
+ {$(INCLUDE)}"\ace\Thread.i"\
+ {$(INCLUDE)}"\ace\Thread_Manager.h"\
+ {$(INCLUDE)}"\ace\Thread_Manager.i"\
+ {$(INCLUDE)}"\ace\Time_Value.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.cpp"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.h"\
+ {$(INCLUDE)}"\ace\Timer_Queue_T.i"\
+ {$(INCLUDE)}"\ace\Token.h"\
+ {$(INCLUDE)}"\ace\Token.i"\
+ {$(INCLUDE)}"\ace\Trace.h"\
+ {$(INCLUDE)}"\ace\WFMO_Reactor.h"\
+ {$(INCLUDE)}"\ace\WFMO_Reactor.i"\
+ {$(INCLUDE)}"\ace\ws2tcpip.h"\
+
+
+"$(INTDIR)\Notify_Performance_Test.obj" : $(SOURCE) $(DEP_CPP_NOTIF)\
+ "$(INTDIR)"
+
+
+# End Source File
+# End Target
# End Project
################################################################################
diff --git a/tests/tests.mdp b/tests/tests.mdp
index 75fa4ef6901..9db3f6d764c 100644
--- a/tests/tests.mdp
+++ b/tests/tests.mdp
Binary files differ